gpt4 book ai didi

c++ - 为什么boost的interprocess_condition死锁在notify_one?

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:19 25 4
gpt4 key购买 nike

This is a link to an MCVE that demonstrates the deadlock

它包含五个部分:

  1. SharedEvent 是存储在共享内存中的 AutoResetEvent 的实现。

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

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

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

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

重现问题:

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

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

  3. 关闭客户端。观察服务器停止打印消息。它被阻塞在 interprocess_condition::notify_one()

最佳答案

问题原因与描述的一样here :

这种 boost 进程间的使用不能用于进程可能崩溃但仍持有锁的情况。

我会发布一个不同的问题,看看是否有人发现了一个很好的替代 boosts condition_variable 和 interprocess_mutex 的方法。

关于c++ - 为什么boost的interprocess_condition死锁在notify_one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44991510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com