我有2个进程共享一个由互斥锁和条件同步的队列。我在其中一个流程中有以下代码。
named_mutex mutex(open_only, "MyMutex");
int main()
{
while(1)
{
scoped_lock <named_mutex> lock(mutex)
//do some processing
}
}
我的问题是互斥锁是否在while循环中的所有调用中都有范围,还是每次while循环启动时都需要获取它?互斥锁的范围是什么?似乎每次在while循环结束时,互斥锁都会被解锁。
由于
答案 0 :(得分:7)
它的行为与循环体内的任何其他局部变量完全相同:每次迭代将创建和销毁一次。在这种情况下,它将在每次迭代时锁定和解锁互斥锁。
答案 1 :(得分:0)
scoped_lock
,顾名思义,锁定创建(在其ctor中)的互斥锁,并在删除时(在其dtor中)将其解锁。
由于lock
实例的范围在while
主体内,因此在创建scoped_lock
时锁定互斥锁,并在while
循环结束时解锁:应该找到break
或continue
,甚至是return
语句,或者只是在达到while
正文的末尾时,每次循环一次。