私は次のコードが何をするかを知っており、条件変数が 1 つしかないのに 2 つ必要であるため、同期の壊れたコードである理由を知っていますが、それが機能しないことを示すために一連のインターリーブ スレッドを提供する方法がわかりません。 . このコードが機能しない理由を例で説明できますか?
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 }