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

Rel*_*lla 3 c++ multithreading boost mutex locking

所以我有一些shared_mutex并完成了这个:

        boost::upgrade_lock<boost::shared_mutex> lock(f->mutex);
        boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
Run Code Online (Sandbox Code Playgroud)

现在我想"解锁"或者至少将其降级为:

boost::shared_lock<boost::shared_mutex> lock_r(f->mutex);
Run Code Online (Sandbox Code Playgroud)

怎么办这样的事情?可能吗?

Dav*_*e S 9

如果您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
}
Run Code Online (Sandbox Code Playgroud)

编辑:另一件事.如果给定的函数只需要独占锁,则可以boost::unique_lock唯一地使用和锁定,而无需同时使用upgradeupgrade_to_unique锁.