提升进程间互斥管理
我有一个线程正在创建一个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也会停留在等待调用条件变量的地方。
我是否应该如何创建共享内存和互斥/ conditons或沿着持久性的方向? 我在Windows上运行此代码。
考虑使用:
boost::interprocess::named_mutex
boost::interprocess::scoped_lock<boost::interprocess::named_mutex>
boost::interprocess::named_condition
而不是在现有的共享内存块中分配互斥锁和条件变量。 Boost为你处理很多杂乱的细节。
注意:您在进程空间中创建这些named_ *对象,而不是在共享内存中。 Boost为您创建包含互斥锁和条件变量的实际共享内存段。
我也尝试将共享内存段两次映射到同一个进程中。 是否有机会在运行正在尝试创建新映射的Process1线程的第二个实例,而旧的映射仍然存在?
链接地址: http://www.djcxy.com/p/50969.html上一篇: boost interprocess mutex in managed
下一篇: c++