我想爲單個生產者和單個消費者實現一個程序。在我的代碼下面,消費者不能消費第一件商品。我無法確定錯誤,並且這裏的項目是以同步的方式生成和使用的。我想實現它,以便生產者生成任意數量的項目,然後消費者將使用這些項目,但不是以同步方式。c中的生產者 - 消費者沒有使用信號量/條件變量
void *consumer()
{
while (1)
{
pthread_mutex_lock(&m);
pthread_cond_signal(&pd);
pthread_cond_wait(&cn, &m);
printf("Consumed item is : %d\n", count);
pthread_mutex_unlock(&m);
if (count == SIZE)
{
printf("Consumer can not consume.. Buffer empty..\n");
break;
}
}
}
void *producer()
{
while (1)
{
if (count == SIZE)
{
printf("Producer can not produce.. Buffer full !!\n");
break;
}
pthread_mutex_lock(&m);
printf("Produced item is : %d\n", ++count);
pthread_cond_signal(&cn);
if (count != SIZE)
pthread_cond_wait(&pd, &m);
pthread_mutex_unlock(&m);
}
}
請修復您的縮進。 –
沒有人曾經無條件等待...... – UmNyobe
如果你不想讓製片人等待,那麼你爲什麼要在製片人中調用'pthread_cond_wait'?毫不意外的是,製造商會一直等到消費者發出信號。 – kaylum