This is a link to an MCVE that demonstrates the deadlock
它包含五个部分:
SharedEvent 是存储在共享内存中的 AutoResetEvent 的实现。
CreatedSharedEvent 创建一个命名的共享内存对象,其中分配了一个 SharedEvent。它提供了一个访问器方法,该方法返回对 SharedEvent 的引用。
OpenedSharedEvent 打开一个命名的共享内存对象,其中已经分配了一个 SharedEvent。它还提供了一个访问器方法,该方法返回对 SharedEvent 的引用。
服务器控制台应用程序使用 CreatedShareEvent 创建 SharedEvent 并每 2 秒设置一次事件。每次设置事件时,它都会打印一条消息。
控制台应用程序使用 OpenedShareEvent 打开共享事件并在循环中等待事件。每次 wait 调用返回时,它都会打印一条消息。
重现问题:
运行服务器。观察每 2 秒打印一次的消息。
运行客户端。观察每 2 秒打印一次的消息。
关闭客户端。观察服务器停止打印消息。它被阻塞在 interprocess_condition::notify_one()
最佳答案
问题原因与描述的一样here :
这种 boost 进程间的使用不能用于进程可能崩溃但仍持有锁的情况。
我会发布一个不同的问题,看看是否有人发现了一个很好的替代 boosts condition_variable 和 interprocess_mutex 的方法。
关于c++ - 为什么boost的interprocess_condition死锁在notify_one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44991510/