我在进程 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) 尽管进程 1 中的线程已经执行了通知,进程 2 仍停留在对条件变量的等待调用中。
在如何创建共享内存和互斥体/条件或持久性方面,我是否遗漏了一些东西?我在 Windows 上运行此代码。