如果我们已经手动解锁过,unique_lock会在销毁时解锁吗?

时间:2019-03-19 18:04:19

标签: c++ multithreading locking mutex

即使我手动调用了unique_lock::unlock()unlock函数也被销毁了,以便在给定的互斥锁上收到两次解锁信号吗?

3 个答案:

答案 0 :(得分:3)

否,它不会尝试解锁。如果您查看unlock,它会

  

确保:owns == false

the destructor

  

效果:如果owns呼叫pm->unlock()

因此,由于unlock释放了所有权,因此析构函数将不会尝试对其进行解锁。

答案 1 :(得分:1)

不。 参见documentation

  

如果*this具有关联的互斥锁并已获得其所有权,则   互斥锁已解锁。

答案 2 :(得分:0)

不是,不是。

考虑mutex的观点,其中std::mutex::unlock(来自cppreference):

  

解锁互斥锁。

     

互斥锁必须由当前执行线程锁定,   否则,行为是不确定的。

因此,如果锁在不再锁定的unlock上调用mutex,将是致命的。