This is a link to an MCVE that demonstrates the deadlock
它包含五个部分:
SharedEvent是存储在共享内存中的AutoResetEvent的实现。
CreatedSharedEvent创建一个已分配SharedEvent的命名共享内存对象。它提供了一个访问器方法,该方法返回对SharedEvent的引用。
OpenedSharedEvent打开一个已分配SharedEvent的已命名共享内存对象。它还提供了一个访问器方法,该方法返回对SharedEvent的引用。
服务器控制台应用程序,它使用CreatedShareEvent创建SharedEvent,并每2秒设置一次事件。每次设置事件时都会打印一条消息。
使用OpenedShareEvent打开共享事件的控制台应用程序,并在循环中等待事件。每次等待调用返回时都会打印一条消息。
重现问题:
运行服务器。观察每2秒打印的信息。
运行客户端。观察每2秒打印的信息。
关闭客户端。注意服务器停止打印消息。它在interprocess_condition :: notify_one()
答案 0 :(得分:0)
问题的原因与描述here:
相同此进程的使用不能用于进程可能崩溃并仍然保持锁定的情况。
我将发布一个不同的问题,看看是否有人发现了boosts condition_variable和interprocess_mutex的良好替代品。