while(1)循环中互斥对象上的boost scoped_lock

boost scoped_lock on mutex in while(1) loop

本文关键字:boost scoped lock 对象 循环 while      更新时间:2023-10-16

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

named_mutex mutex(open_only, "MyMutex");
int main()
{
   while(1)
   {
      scoped_lock <named_mutex> lock(mutex)
      //do some processing 
   }
}

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

感谢

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

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

由于lock实例的作用域在while主体内,因此互斥体在创建scoped_lock时被锁定,而在while循环结束时被解锁:如果找到breakcontinue,甚至是return语句,或者仅仅当到达while主体的末尾时,每个循环一次。