您当前的位置: 首页 >  c++
  • 0浏览

    0关注

    1477博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ boost::upgrade_lock boost::upgrade_to_unique_lock如何使用 例子

软件工程小施同学 发布时间:2021-10-28 10:38:03 ,浏览量:0

upgrade_lock将可将读锁(shared_lock)升级为upgrade_lock,与shared_lock不互斥,与别的upgrade_lock和unique_lock互斥。

也就是说线程A获得mutex的upgrade_lock后,线程B、C等还可以获得mutex的share_mutex,反之亦然。

upgrade_to_unique_lock可将upgrade_lock升级为独占锁,不允许其它线程读或写  

question

So I had some shared_mutex and done this:

        boost::upgrade_lock lock(f->mutex);
        boost::upgrade_to_unique_lock uniqueLock(lock);

now I want to "unlock it" or at least downgrade it to something like:

boost::shared_lock lock_r(f->mutex);

How to do such thing? Is it possible?

solution

If you let the upgrade_to_unique_lock go out of scope, it will automatically downgrade back to upgrade ownership.

For example

void foo() {
   boost::upgrade_lock lock(f->mutex);

   // Do shared operations, as mutex is held upgradeable
   // ...

   if(need_to_get_unique)
   {
      boost::upgrade_to_unique_lock uniqueLock(lock); 

      // Do exclusive operations, as mutex is held uniquely
      // ... 
      // At end of scope unique is released back to upgradeable
   }
   // Only shared operations here, as it's only held upgradeable
   // ...

   // At end of scope mutex is completely released
}

Edit: One other thing. If a given function only requires exclusive locks, you can use boost::unique_lock and lock uniquely, without going through both the upgrade and upgrade_to_unique locks.

如何解锁boost :: upgrade_to_unique_lock(由boost :: shared_mutex制成)? - IT屋-程序员软件开发技术分享社区

关注
打赏
1665320866
查看更多评论
立即登录/注册

微信扫码登录

2.5467s