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