【问题标题】:boost scoped_lock on mutex in while(1) loop在 while(1) 循环中提升互斥锁上的 scoped_lock
【发布时间】: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 循环结束时,互斥锁都被解锁了。

谢谢

【问题讨论】:

    标签: c++ boost boost-interprocess


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 你的回答模棱两可; while 循环结束时 是什么意思?在每次迭代结束时,或者当你跳出循环时?
      • 我使用了单数,一个循环,没有所有循环。确切的时间是程序超出while 范围,然后是找到breakcontinue 指令时,或者只是当它到达主体的末尾时。
      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2012-07-09
      • 2013-08-09
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多