Linux 多线程编程—使用条件变量实现循环打印

编写一个程序,开启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.\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 }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值