编写一个程序,开启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 }
作者:HarlanC
博客地址:http://www.cnblogs.com/harlanc/
个人博客: http://www.harlancn.me/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接
如果觉的博主写的可以,收到您的赞会是很大的动力,如果您觉的不好,您可以投反对票,但麻烦您留言写下问题在哪里,这样才能共同进步。谢谢!
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。



