N个并发读者和1个制作者的成语或模式

时间:2012-12-18 13:02:00

标签: c++ concurrency c++11

使用C ++ 11标准库(最终只有boost::thread的帮助)有一种干净的方式来实现N读者 - 1生产者解决方案,所有读者,同时得到通知(生产者使用std::condition_variable::notify_all())保证在生产者最终第二次进入临界区之前进入临界区。换句话说,所有通知的读者必须遵守共享资源的相同状态。一旦制作人注意到N个读者,它就无法修改共享资源,直到所有N个读者完成阅读。请注意,boost :: barrier并不是我真正需要的,因为我事先并不知道N. N可能因通知而异。

2 个答案:

答案 0 :(得分:1)

您可以使用atomic counters,并从生产者线程进行一些轮询。

当计数器到达N0时(它取决于你),生产者开始工作并生产它需要生产的任何东西。在通知条件变量之前,生产者将计数器设置为0(或N)。

当读者完成后,它只会增加(或减少)计数器。

答案 1 :(得分:1)

您所描述的内容称为barrier