我有一个托管共享内存段,它有一个 boost::interprocess::interprocess_mutex 和一个 boost::interprocess::interprocess_condition 变量。我有 2 个进程访问共享内存,它们根据互斥体和条件同步访问。我遇到过一种情况,我的第一个进程在notify_all方法上阻塞,最初我认为这是一个非阻塞方法,但进程间条件似乎实现了一个用于同步自身的互斥体。
我遇到这个死锁的情况是当进程 2 在等待条件时被不优雅地终止时,我相信这会阻止条件互斥体被解锁,然后当我再次运行进程 2 时它会阻塞。无论如何,当我第二次启动进程 2 时,是否可以重置或清理进程间条件。
我有2个进程共享一个由互斥和条件同步的队列.我在其中一个进程中有以下代码.
named_mutex mutex(open_only, "MyMutex");
int main()
{
while(1)
{
scoped_lock <named_mutex> lock(mutex)
//do some processing
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是互斥锁是否在while循环中的所有调用中都有范围,还是每次while循环启动时都需要获取?互斥锁的范围是什么?似乎每次在while循环结束时互斥锁都会被解锁.
谢谢
我有2个进程,进程1创建一个boost managed_shared_memory段,进程2打开这个段.然后重新启动过程1并且过程1的开始具有以下内容,
struct vshm_remove
{
vshm_remove()
{
boost::interprocess::shared_memory_object::remove("VMySharedMemory");
}
~vshm_remove()
{
boost::interprocess::shared_memory_object::remove("VMySharedMemory");
}
} vremover;
Run Code Online (Sandbox Code Playgroud)
我理解当进程1开始或结束时,将在我的共享内存上调用remove方法,但是如果没有附加进程2,它是否只能删除它?我使用以下内容附加到进程2中的共享内存,
boost::interprocess::managed_shared_memory *vfsegment;
vfsegment = new boost::interprocess::managed_shared_memory(boost::interprocess::open_only, "VMySharedMemory");
Run Code Online (Sandbox Code Playgroud)
我注意到无论进程2连接如何都删除了共享内存.