为什么 boost interprocess_condition notify_one陷入僵局?



这是指向演示死锁的MCVE的链接

它包含五个部分:

共享
  1. 事件是存储在共享内存中的自动重置事件的实现。

  2. CreatedSharedEvent 创建一个命名的共享内存对象,其中分配了 SharedEvent。它提供了一个访问器方法,该方法返回对共享事件的引用。

  3. OpenedSharedEvent 打开一个命名的共享内存对象,其中已分配了 SharedEvent。它还提供了一个访问器方法,该方法返回对共享事件的引用。

  4. 一个服务器控制台应用程序,它使用 CreatedShareEvent 创建共享事件,并每 2 秒设置一次事件。每次设置事件时,它都会打印一条消息。

  5. 一个控制台应用程序,它使用 OpenShareEvent 打开共享事件并在循环中等待该事件。每次等待呼叫返回时,它都会打印一条消息。

要重现此问题:

  1. 运行服务器。观察每 2 秒打印一次的消息。

  2. 运行客户端。观察每 2 秒打印一次的消息。

  3. 关闭客户端。观察到服务器停止打印邮件。它在 interprocess_condition::notify_one(( 中被阻止

问题的原因与此处所述相同:

这种提升间进程的使用不能在进程可能崩溃但仍保持锁定的情况下使用。

我将发布一个不同的问题,看看是否有人发现了提升condition_variable和interprocess_mutex的良好替代品。

相关内容

最新更新