std::mutex m_a;
{   
std::unique_lock<std::mutex> lk(m_a);
;
}
unique_lock<std::mutex> lk(m_a);
对象在超出作用域时,会调用析构函数,析构函数会将对象持有的互斥锁解锁,所以即使不主动解锁,超出作用域后 lk(m_a)也会被析构函数解锁。
下面是VS2019中mutex头文件中对~unique_lock()的定义

private:
  _Mutex* _Pmtx;
  bool _Owns;

 

unique_lock() noexcept {
        if (_Owns) {
            _Pmtx->unlock();
        }
    }


如果是调用的POSIX互斥锁,则在加锁后必须解锁。

关于unique_lock<std::mutex> lk(m_a); 只加锁 不解锁

 

相关文章:

  • 2021-04-29
  • 2022-01-07
  • 2021-10-12
  • 2022-12-23
  • 2022-12-23
  • 2022-02-24
  • 2021-08-25
  • 2022-12-23
猜你喜欢
  • 2022-01-10
  • 2022-12-23
  • 2021-07-18
  • 2022-01-26
  • 2021-12-28
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案