小编rud*_*asi的帖子

提升notify_all上的进程间条件阻塞

我有一个托管共享内存段,它有一个 boost::interprocess::interprocess_mutex 和一个 boost::interprocess::interprocess_condition 变量。我有 2 个进程访问共享内存,它们根据互斥体和条件同步访问。我遇到过一种情况,我的第一个进程在notify_all方法上阻塞,最初我认为这是一个非阻塞方法,但进程间条件似乎实现了一个用于同步自身的互斥体。

我遇到这个死锁的情况是当进程 2 在等待条件时被不优雅地终止时,我相信这会阻止条件互斥体被解锁,然后当我再次运行进程 2 时它会阻塞。无论如何,当我第二次启动进程 2 时,是否可以重置或清理进程间条件。

c++ boost mutex ipc shared-memory

5
推荐指数
1
解决办法
1954
查看次数

在while(1)循环中对互斥锁上的scoped_lock进行提升

我有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循环结束时互斥锁都会被解锁.

谢谢

c++ boost boost-interprocess

2
推荐指数
1
解决办法
1065
查看次数

在附加进程时提升删除managed_shared_memory

我有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连接如何都删除了共享内存.

c++ boost ipc shared-memory

1
推荐指数
1
解决办法
4211
查看次数

标签 统计

boost ×3

c++ ×3

ipc ×2

shared-memory ×2

boost-interprocess ×1

mutex ×1