关于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互斥锁,则在加锁后必须解锁。

                    
                
                
            
        
浙公网安备 33010602011771号