【发布时间】:2014-03-13 15:11:48
【问题描述】:
我有一个从客户端接受数据的服务器。数据以不规则的间隔以大块的形式出现。我有一个线程保持连接打开,从缓冲区读取数据并将它们放入队列。我有另一个线程接收请求,为计算做好准备,然后将它们交给工作线程。
我有 4 个工作线程。这是一个生产者-消费者场景。我为每个线程制定了一个逻辑,但我需要弄清楚如何做到这一点:
1) 生产者拿起并准备一个请求
2) 生产者向工作线程发出信号以运行并进入睡眠状态
3) 在所有工作线程完成后,通知生产者唤醒并处理结果,工作人员进入睡眠状态
4) 重复
如何通知所有工作人员醒来?我不能使用信号量,因为我需要让所有 4 个工作人员同时运行。我也不想在完成后删除工作人员并为每个请求创建新的工作人员(我想重用线程)。
每个工人都有while(true) 循环。我想在循环开始时停止每个线程,然后在生产者中唤醒它们,等到它们全部完成并在 while 循环信号生产者结束时。
显然没有忙着等待,那太糟糕了。
【问题讨论】:
-
你现在是怎么做的?显示您的代码。
-
使用信号量,这是更简单的方法...给我们看你的,我给你看
标签: c multithreading pthreads producer-consumer