我想为单个生产者和单个消费者实现一个程序。在我的代码下面,消费者不能消费第一件商品。我无法确定错误,并且这里的项目是以同步的方式生成和使用的。我想实现它,以便生产者生成任意数量的项目,然后消费者将使用这些项目,但不是以同步方式。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