【发布时间】:2016-04-13 09:36:19
【问题描述】:
我想从一个进程向多个其他进程发送“信号/通知”,但是似乎没有直接的解决方案来解决我想使用 Win API 做什么:
不能在进程之间共享条件变量。
一个事件对象似乎从一个线程向另一个线程发出信号(使用自动重置事件)或多个(手动重置事件),但是我需要手动关闭信号。然后可能很难知道所有“观察者”何时都确认了信号。
我也使用了 Boost 的 IPC 同步,但我不太喜欢这种实现,因为互斥体没有“放弃”状态作为 Windows 对应部分(如果使用互斥体的软件崩溃,它是很难从中恢复)。
有什么建议吗?基本上我想使用一个条件变量,但它应该跨多个进程工作。谢谢!
澄清:
基本上这就是我正在做的事情:我正在从一个进程(我们称之为控制器)更新共享内存,该进程需要通知多个进程(观察者)共享内存已更新。
我在使用 boost 时所做的是使用共享 (IPC) 互斥锁和条件变量。条件变量将在每个观察者的单独线程中等待,直到控制器通知它从共享内存中读取。在观察者从共享内存中读取数据后,它将返回等待来自控制器的另一个通知。如何使用 Win API 做到这一点?
【问题讨论】:
-
您是否在与任意数量的“听众”打交道,而您事先并不知道? “监听器”是否以任何方式向“控制器”注册?
-
notify_all()cplusplus.com/reference/condition_variable/condition_variable 怎么样 -
@Marichyasana:据我了解,这不适用于跨流程边界。
-
@IInspectable 是的,任意数量的听众。不,我可以在共享内存中添加某种计数器,但是我不确定是否有可能检测到其中一个侦听器是否会崩溃
-
你能用Sockets吗?