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

 

std::mutex m_a;
{   
std::unique_lock<std::mutex> lk(m_a);
    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互斥锁,则在加锁后必须解锁。

 

posted @ 2021-02-08 14:18  zeroPatrick  阅读(792)  评论(0)    收藏  举报