在 while(1) 循环中提升互斥锁上的 scoped_lock
Posted
技术标签:
【中文标题】在 while(1) 循环中提升互斥锁上的 scoped_lock【英文标题】:boost scoped_lock on mutex in while(1) loop 【发布时间】:2013-07-18 16:54:57 【问题描述】:我有 2 个进程共享一个由互斥锁和条件同步的队列。我的一个进程中有以下代码。
named_mutex mutex(open_only, "MyMutex");
int main()
while(1)
scoped_lock <named_mutex> lock(mutex)
//do some processing
我的问题是,互斥锁是否在 while 循环中的所有调用中都具有作用域,还是每次 while 循环开始时都需要获取它?解锁互斥锁的范围是什么?似乎每次在 while 循环结束时,互斥锁都被解锁了。
谢谢
【问题讨论】:
【参考方案1】:它的行为与循环体中的任何其他局部变量完全相同:每次迭代都会创建和销毁一次。在这种情况下,它将在每次迭代时锁定和解锁互斥锁一次。
【讨论】:
【参考方案2】:顾名思义,scoped_lock
在创建时(在其 ctor 中)锁定互斥体,并在删除时(在其 dtor 中)解锁。
由于lock
实例的范围在while
主体内,因此在创建scoped_lock
时会锁定互斥体,并在while
循环结束时解锁:应该是break
还是@987654327 @,甚至是 return
语句,或者只是在到达 while
主体的末尾时,每个循环一次。
【讨论】:
你的回答模棱两可; while 循环结束时 是什么意思?在每次迭代结束时,或者当你跳出循环时? 我使用了单数,一个循环,没有所有循环。确切的时间是程序超出while
范围,然后是找到break
、continue
指令时,或者只是当它到达主体的末尾时。以上是关于在 while(1) 循环中提升互斥锁上的 scoped_lock的主要内容,如果未能解决你的问题,请参考以下文章