【问题标题】:How to unlock boost::upgrade_to_unique_lock (made from boost::shared_mutex)?如何解锁 boost::upgrade_to_unique_lock (由 boost::shared_mutex 制成)?
【发布时间】:2011-10-09 16:28:58
【问题描述】:

所以我有一些 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);

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

【问题讨论】:

    标签: c++ multithreading boost locking mutex


    【解决方案1】:

    如果您让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 锁。

    【讨论】:

      猜你喜欢
      • 2011-03-19
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 2014-02-02
      • 1970-01-01
      • 2013-08-27
      相关资源
      最近更新 更多