Linux|Linux 多线程编程—使用条件变量实现循环打印
编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
【Linux|Linux 多线程编程—使用条件变量实现循环打印】使用条件变量来实现:
1 #include 2 #include 3 #include4 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.\n"); 18 pthread_mutex_lock(&mtx); 19 //printf("A wait.\n"); 20 pthread_cond_wait(&condC,&mtx); 21 printf("A.\n"); 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.\n"); 34 pthread_mutex_lock(&mtx); 35 //printf("B wait.\n"); 36 pthread_cond_wait(&condA,&mtx); 37 printf("B.\n"); 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.\n"); 51 pthread_mutex_lock(&mtx); 52 //printf("C wait.\n"); 53 pthread_cond_wait(&condB,&mtx); 54 printf("C.\n"); 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..\n"); 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 }
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- Linux下面如何查看tomcat已经使用多少线程
- 说得清,说不清