Fork me on GitHub

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 }

 

posted @ 2016-01-24 17:58  HarlanC  阅读(718)  评论(0编辑  收藏  举报