使用C ++我打算让producer
进程编写数据vector
,然后编写几个consumer
进程来读取该数据。将存在共享内存段(Boost :: Interprocess),其中将存储数据vector
。问题是:我无法控制第三方应用程序启动进程的顺序,consumer
可能会在producer
生成任何数据之前启动。有哪些机制可用于协调过程,以便可以命令consumer
进程耐心等待,直到producer
信号表示数据准备就绪;无论流程的启动顺序是什么?
答案 0 :(得分:0)
我猜命名信号量是个不错的选择。您的生产者和消费者应用程序应该同意(硬编码)信号量的名称,例如/ tmp / mySem,只有生产者必须创建和发布信号量,而消费者应该等待信号量存在和状态。
答案 1 :(得分:0)
如果创建共享内存是生产者进程的责任,那么您可以使用boost barrier来同步启动。
您可以创建一个用于创建共享内存的屏障,可能需要部署一些作业。在达到这个障碍后,消费者流程可以继续处理它们。
您可以在此page
查看增强屏障的详细信息