【发布时间】:2016-04-05 21:06:53
【问题描述】:
我正在研究生产者和消费者问题。我创建了一个生产者将内容放入有界缓冲区并使用多个消费者从缓冲区获取数据。为了检查每个消费者是否都在工作,我给他们每个人一个 ID,然后让他们打印出来。
以下是创建多个消费者的代码。
#define CONSUMER_NUM 5;
pthread_t consumer[CONSUMER_NUM];
for(i=0;i<CONSUMER_NUM;i++){
int t = i;
pthread_create(&consumer[i],NULL,fun_consumer,(void*)&t);
} // pass i to the function fun_consumer to be an id of the thread
我的预期可能是这样的:
Consumer 1
Consumer 2
Consumer 3
Consumer 4
Consumer 5
我知道由于线程的随机执行,输出通常不会像这样。我在这里期望的是大多数消费者会开始工作。然而,事实是打印出来的程序是这样的:
Consumer 5
Consumer 5
Consumer 5
Consumer 5
Consumer 5
这里只使用了一个消费者。我尝试了“睡眠”,它可以给我预期的输出,但会导致执行缓慢。我想知道是否有更好的方法来解决这个问题?
【问题讨论】:
标签: c multithreading pthreads