我知道下面的代码做了什么,我知道为什么它是一个损坏的同步代码,因为它只有一个条件变量,而我们需要两个,但我不知道如何提供一系列交错线程来显示它不起作用. 你能用一个例子说明为什么这段代码不能工作吗?
1 cond_t cond = PTHREAD_COND_INITIALIZER;
2 mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;;
3
4 void *producer(void *arg) {
5 int i;
6 for (i = 0; i < loops; i++) {
7 Pthread_mutex_lock(&mutex);
8 while (count == 1)
9 Pthread_cond_wait(&cond, &mutex);
10 put(i);
11 Pthread_cond_signal(&cond);
12 Pthread_mutex_unlock(&mutex);
13 }
14 }
15
16 void *consumer(void *arg) {
17 int i;
18 for (i = 0; i < loops; i++) {
19 Pthread_mutex_lock(&mutex);
20 while (count == 0)
21 Pthread_cond_wait(&cond, &mutex);
22 int tmp = get();
23 Pthread_cond_signal(&cond);
24 Pthread_mutex_unlock(&mutex);
25 printf("%d\n", tmp);
26 }
27 }