如何解锁 boost::upgrade_to_unique_lock (由 boost::shared_mutex 制成)?

2024-04-05

所以我有一些shared_mutex并这样做了:

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

现在我想“解锁它”或至少将其降级为:

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

这样的事该怎么办呢?是否可以?


如果你让upgrade_to_unique_lock超出范围,它会自动降级回升级所有权。

例如

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

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

   if(need_to_get_unique)
   {
      boost::upgrade_to_unique_lock<boost::shared_mutex> 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
}

编辑:另一件事。如果给定函数只需要独占锁,则可以使用boost::unique_lock并唯一锁定,无需经过两个upgrade and upgrade_to_unique locks.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解锁 boost::upgrade_to_unique_lock (由 boost::shared_mutex 制成)? 的相关文章

随机推荐