使用C ++ 11标准库(最终只有boost::thread
的帮助)有一种干净的方式来实现N读者 - 1生产者解决方案,所有读者,同时得到通知(生产者使用std::condition_variable::notify_all()
)保证在生产者最终第二次进入临界区之前进入临界区。换句话说,所有通知的读者必须遵守共享资源的相同状态。一旦制作人注意到N个读者,它就无法修改共享资源,直到所有N个读者完成阅读。请注意,boost :: barrier并不是我真正需要的,因为我事先并不知道N. N可能因通知而异。
答案 0 :(得分:1)
您可以使用atomic counters,并从生产者线程进行一些轮询。
当计数器到达N
或0
时(它取决于你),生产者开始工作并生产它需要生产的任何东西。在通知条件变量之前,生产者将计数器设置为0
(或N
)。
当读者完成后,它只会增加(或减少)计数器。
答案 1 :(得分:1)
您所描述的内容称为barrier