0

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

4

2 回答 2

1

您可以使用原子计数器,并从生产者线程进行一些轮询。

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

当阅读器完成时,它只是增加(或减少)计数器。

于 2012-12-18T13:16:56.707 回答
1

你所描述的叫做障碍

于 2012-12-18T13:21:39.457 回答