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

How to unlock boost::upgrade_to_unique_lock (made from boost::shared_mutex)?

本文关键字:boost 生成 lock shared mutex unique upgrade 何解锁 解锁 to      更新时间:2023-10-16

所以我有一些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和锁,而不需要同时使用upgradeupgrade_to_unique锁。