【发布时间】:2013-08-09 09:14:27
【问题描述】:
我在进程 1 中有一个线程创建 boost::interprocess::managed_shared_memory 段。在这一部分中,我使用自定义分配器分配了一个 boost::interprocess::deque,并使用默认分配器创建了一个 boost::interprocess::interprocess_mutex 和 2 个 boost::interprocess::interprocess_condition 变量。我使用 find_or_construct 方法来创建这些。
我有另一个进程(进程 2),它使用我在进程 2 中打开的 boost::interprocess::managed_shared_memory 段上的 find 方法打开这些。
我了解 managed_shared_memory 段具有内核或文件系统持久性,而 interprocess_mutex/interprocess_condition 变量具有进程级持久性。
我被卡住的场景。
1) 进程 1 启动创建所有内容的线程。
2) 进程 2 启动并打开所有内容,此时共享内存和同步运行良好。
3) 进程 1 重新启动试图再次创建所有内容的线程(我相信它不应该,因为我正在使用 find_or_construct)
4) 进程 2 在等待调用条件变量时卡住了,即使进程 1 中的线程已经完成了通知。
在如何创建共享内存和互斥体/条件或持久性方面,我是否遗漏了一些东西?我在 Windows 上运行此代码。
【问题讨论】:
标签: c++ multithreading boost ipc sync