xref: /qemu/tests/tcg/multiarch/testthread.c (revision f71d61216ea8eb914ee79459a58dc5343d95ddec)
1*f71d6121SCatalin Patulea #include <assert.h>
21b6b029eSbellard #include <stdlib.h>
31b6b029eSbellard #include <stdio.h>
47fb9a24eSbellard #include <string.h>
51b6b029eSbellard #include <signal.h>
61b6b029eSbellard #include <unistd.h>
71b6b029eSbellard #include <inttypes.h>
81b6b029eSbellard #include <pthread.h>
91b6b029eSbellard #include <sys/wait.h>
101b6b029eSbellard #include <sched.h>
111b6b029eSbellard 
12*f71d6121SCatalin Patulea void checked_write(int fd, const void *buf, size_t count)
13*f71d6121SCatalin Patulea {
14*f71d6121SCatalin Patulea     ssize_t rc = write(fd, buf, count);
15*f71d6121SCatalin Patulea     assert(rc == count);
16*f71d6121SCatalin Patulea }
17*f71d6121SCatalin Patulea 
181b6b029eSbellard void *thread1_func(void *arg)
191b6b029eSbellard {
201b6b029eSbellard     int i;
211b6b029eSbellard     char buf[512];
221b6b029eSbellard 
231b6b029eSbellard     for(i=0;i<10;i++) {
241b6b029eSbellard         snprintf(buf, sizeof(buf), "thread1: %d %s\n", i, (char *)arg);
25*f71d6121SCatalin Patulea         checked_write(1, buf, strlen(buf));
261b6b029eSbellard         usleep(100 * 1000);
271b6b029eSbellard     }
281b6b029eSbellard     return NULL;
291b6b029eSbellard }
301b6b029eSbellard 
311b6b029eSbellard void *thread2_func(void *arg)
321b6b029eSbellard {
331b6b029eSbellard     int i;
341b6b029eSbellard     char buf[512];
351b6b029eSbellard     for(i=0;i<20;i++) {
361b6b029eSbellard         snprintf(buf, sizeof(buf), "thread2: %d %s\n", i, (char *)arg);
37*f71d6121SCatalin Patulea         checked_write(1, buf, strlen(buf));
381b6b029eSbellard         usleep(150 * 1000);
391b6b029eSbellard     }
401b6b029eSbellard     return NULL;
411b6b029eSbellard }
421b6b029eSbellard 
431b6b029eSbellard void test_pthread(void)
441b6b029eSbellard {
451b6b029eSbellard     pthread_t tid1, tid2;
461b6b029eSbellard 
471b6b029eSbellard     pthread_create(&tid1, NULL, thread1_func, "hello1");
481b6b029eSbellard     pthread_create(&tid2, NULL, thread2_func, "hello2");
491b6b029eSbellard     pthread_join(tid1, NULL);
501b6b029eSbellard     pthread_join(tid2, NULL);
511b6b029eSbellard     printf("End of pthread test.\n");
521b6b029eSbellard }
531b6b029eSbellard 
541b6b029eSbellard int main(int argc, char **argv)
551b6b029eSbellard {
561b6b029eSbellard     test_pthread();
571b6b029eSbellard     return 0;
581b6b029eSbellard }
59