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

时间:2013-07-18 16:54:58

标签: c++ boost boost-interprocess

我有2个进程共享一个由互斥锁和条件同步的队列。我在其中一个流程中有以下代码。

named_mutex mutex(open_only, "MyMutex");

int main()
{
   while(1)
   {
      scoped_lock <named_mutex> lock(mutex)
      //do some processing 
   }
}

我的问题是互斥锁是否在while循环中的所有调用中都有范围,还是每次while循环启动时都需要获取它?互斥锁的范围是什么?似乎每次在while循环结束时,互斥锁都会被解锁。

由于

2 个答案:

答案 0 :(得分:7)

它的行为与循环体内的任何其他局部变量完全相同:每次迭代将创建和销毁一次。在这种情况下,它将在每次迭代时锁定和解锁互斥锁。

答案 1 :(得分:0)

scoped_lock,顾名思义,锁定创建(在其ctor中)的互斥锁,并在删除时(在其dtor中)将其解锁。

由于lock实例的范围在while主体内,因此在创建scoped_lock时锁定互斥锁,并在while循环结束时解锁:应该找到breakcontinue,甚至是return语句,或者只是在达到while正文的末尾时,每次循环一次。