3

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

named_mutex mutex(open_only, "MyMutex");

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

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

谢谢

4

2 回答 2

10

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

于 2013-07-18T16:59:02.040 回答
0

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

由于lock实例的范围在while主体内,因此互斥体在scoped_lock创建时被锁定,并在while循环结束时解锁:如果找到breakor continue,甚至是一条return语句,或者只是在while到达主体的末尾时,一次对于每个循环。

于 2013-07-18T17:00:55.557 回答