Linux 多线程编程 实例 2
编写一个程序,开启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 }

浙公网安备 33010602011771号