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