0

使用 C++ 我计划让一个producer进程写入数据vector,然后有几个consumer进程读取该数据。将有一个共享内存段(Boost::Interprocess)vector存储数据。问题是:我无法控制第三方应用程序启动进程的顺序,可能是在生成任何数据consumer之前启动。producer有哪些机制可用于协调进程,以便consumer可以命令进程耐心等待,直到producer数据准备就绪的信号;无论进程启动的顺序如何?

4

2 回答 2

0

我想命名信号量是一个不错的选择。您的生产者和消费者应用程序应该同意(硬编码)信号量的名称,例如 /tmp/mySem 并且只有生产者必须创建和发布信号量,而消费者应该等待信号量的存在和状态。

于 2013-07-09T18:58:04.923 回答
0

如果创建共享内存是生产者进程的责任,那么您可以使用 boost barrier 来同步启动。

您可以创建一个屏障来创建共享内存,也许可以部署一些作业。达到这个障碍后,消费者进程可以继续处理它们。

您可以在此页面查看提升屏障的详细信息

于 2013-07-10T07:36:49.387 回答