xref: /openbmc/qemu/tests/tcg/multiarch/testthread.c (revision dd28bebd)
1*dd28bebdSAlex Bennée #include <assert.h>
2*dd28bebdSAlex Bennée #include <stdlib.h>
3*dd28bebdSAlex Bennée #include <stdio.h>
4*dd28bebdSAlex Bennée #include <string.h>
5*dd28bebdSAlex Bennée #include <unistd.h>
6*dd28bebdSAlex Bennée #include <inttypes.h>
7*dd28bebdSAlex Bennée #include <pthread.h>
8*dd28bebdSAlex Bennée #include <sys/wait.h>
9*dd28bebdSAlex Bennée #include <sched.h>
10*dd28bebdSAlex Bennée 
11*dd28bebdSAlex Bennée void checked_write(int fd, const void *buf, size_t count)
12*dd28bebdSAlex Bennée {
13*dd28bebdSAlex Bennée     ssize_t rc = write(fd, buf, count);
14*dd28bebdSAlex Bennée     assert(rc == count);
15*dd28bebdSAlex Bennée }
16*dd28bebdSAlex Bennée 
17*dd28bebdSAlex Bennée void *thread1_func(void *arg)
18*dd28bebdSAlex Bennée {
19*dd28bebdSAlex Bennée     int i;
20*dd28bebdSAlex Bennée     char buf[512];
21*dd28bebdSAlex Bennée 
22*dd28bebdSAlex Bennée     for(i=0;i<10;i++) {
23*dd28bebdSAlex Bennée         snprintf(buf, sizeof(buf), "thread1: %d %s\n", i, (char *)arg);
24*dd28bebdSAlex Bennée         checked_write(1, buf, strlen(buf));
25*dd28bebdSAlex Bennée         usleep(100 * 1000);
26*dd28bebdSAlex Bennée     }
27*dd28bebdSAlex Bennée     return NULL;
28*dd28bebdSAlex Bennée }
29*dd28bebdSAlex Bennée 
30*dd28bebdSAlex Bennée void *thread2_func(void *arg)
31*dd28bebdSAlex Bennée {
32*dd28bebdSAlex Bennée     int i;
33*dd28bebdSAlex Bennée     char buf[512];
34*dd28bebdSAlex Bennée     for(i=0;i<20;i++) {
35*dd28bebdSAlex Bennée         snprintf(buf, sizeof(buf), "thread2: %d %s\n", i, (char *)arg);
36*dd28bebdSAlex Bennée         checked_write(1, buf, strlen(buf));
37*dd28bebdSAlex Bennée         usleep(150 * 1000);
38*dd28bebdSAlex Bennée     }
39*dd28bebdSAlex Bennée     return NULL;
40*dd28bebdSAlex Bennée }
41*dd28bebdSAlex Bennée 
42*dd28bebdSAlex Bennée void test_pthread(void)
43*dd28bebdSAlex Bennée {
44*dd28bebdSAlex Bennée     pthread_t tid1, tid2;
45*dd28bebdSAlex Bennée 
46*dd28bebdSAlex Bennée     pthread_create(&tid1, NULL, thread1_func, "hello1");
47*dd28bebdSAlex Bennée     pthread_create(&tid2, NULL, thread2_func, "hello2");
48*dd28bebdSAlex Bennée     pthread_join(tid1, NULL);
49*dd28bebdSAlex Bennée     pthread_join(tid2, NULL);
50*dd28bebdSAlex Bennée     printf("End of pthread test.\n");
51*dd28bebdSAlex Bennée }
52*dd28bebdSAlex Bennée 
53*dd28bebdSAlex Bennée int main(int argc, char **argv)
54*dd28bebdSAlex Bennée {
55*dd28bebdSAlex Bennée     test_pthread();
56*dd28bebdSAlex Bennée     return 0;
57*dd28bebdSAlex Bennée }
58