编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
使用条件变量来实现:
1 #include <pthread.h> 2 #include <stdio.h> 3 #include <unistd.h> 4 static pthread_mutex_t mtx=PTHREAD_MUTEX_INITIALIZER; 5 6 static pthread_cond_t condA ; 7 static pthread_cond_t condB ; 8 static pthread_cond_t condC ; 9 10 11 void* threadA(void *arg) 12 { 13 int a =10; 14 while(a--) 15 { 16 //sleep(2); 17 //printf("A begin. "); 18 pthread_mutex_lock(&mtx); 19 //printf("A wait. "); 20 pthread_cond_wait(&condC,&mtx); 21 printf("A. "); 22 pthread_mutex_unlock(&mtx); 23 pthread_cond_signal(&condA); 24 } 25 } 26 27 void* threadB(void *arg) 28 { 29 int b=10; 30 while(b--) 31 { 32 //sleep(2); 33 //printf("B begin. "); 34 pthread_mutex_lock(&mtx); 35 //printf("B wait. "); 36 pthread_cond_wait(&condA,&mtx); 37 printf("B. "); 38 pthread_mutex_unlock(&mtx); 39 pthread_cond_signal(&condB); 40 } 41 } 42 43 void* threadC(void *arg) 44 45 { 46 int c=10; 47 while(c--) 48 { 49 //sleep(2); 50 //printf("C begin. "); 51 pthread_mutex_lock(&mtx); 52 //printf("C wait. "); 53 pthread_cond_wait(&condB,&mtx); 54 printf("C. "); 55 pthread_mutex_unlock(&mtx); 56 pthread_cond_signal(&condC); 57 } 58 } 59 int main (void *arg) 60 { 61 pthread_t tidA; 62 pthread_t tidB; 63 pthread_t tidC; 64 pthread_cond_init(&condA,NULL); 65 pthread_cond_init(&condB,NULL); 66 pthread_cond_init(&condC,NULL); 67 pthread_create(&tidA,NULL,&threadA,NULL); 68 pthread_create(&tidB,NULL,&threadB,NULL); 69 pthread_create(&tidC,NULL,&threadC,NULL); 70 71 printf("main begin.. "); 72 sleep(4); 73 pthread_cond_signal(&condC); 74 75 pthread_join(tidA,NULL); 76 pthread_join(tidB,NULL); 77 pthread_join(tidC,NULL); 78 79 return 0; 80 }