1 #include<stdio.h>
2 #include<stddef.h>
3 #include<pthread.h>
4 #include<unistd.h>
5 int i=1;
6 pthread_mutex_t mutex;
7 pthread_cond_t cond;
8
9 void * Task1()
10 {
11 for(i=1;i<9;i++)
12 {
13 pthread_mutex_lock(&mutex);
14 if(i%3!=0)printf("In the Task1:%d\n",i);
15 else pthread_cond_signal(&cond);
16 pthread_mutex_unlock(&mutex);
17 sleep(1);
18 }
19 return NULL;
20 }
21
22 void * Task2()
23 {
24 while(i<9)
25 {
26 pthread_mutex_lock(&mutex);
27 if(i%3!=0)
28 pthread_cond_wait(&cond,&mutex);//由于i=8就截止,导致Task2一直处于wait状态
29
30 printf("In the Task2:\t%d\n",i);
31 pthread_mutex_unlock(&mutex);
32 sleep(1);
33 }
34 return NULL;
35
36 }
37
38
39 int main()
40 {
41 pthread_t t_id1,t_id2;
42 int succ;
43
44 pthread_mutex_init(&mutex,NULL);
45 pthread_cond_init(&cond,NULL);
46
47 succ=pthread_create(&t_id1,NULL,Task1,NULL);
48 if(succ){printf("Failure in create thread!\n");return NULL;}
49
50 succ=pthread_create(&t_id2,NULL,Task2,NULL);
51 if(succ){printf("Failure in create thread2!\n");return NULL;}
52
53 pthread_join(t_id1,NULL);
54 pthread_join(t_id2,NULL);
55
56 pthread_mutex_destroy(&mutex);
57 pthread_cond_destroy(&cond);
58 return NULL;
59 }
在使用pthread_cond_wait(),时需要考虑处于等待的状态在最后是否会退出,当上述程序i=8时,出现了一直等待的状态。
解决方法1:在设置条件时,让最后一次调用时,wait 那个进程不处于等待中;
解决方法2:使用pthread_cond_timedwait()