【问题标题】:Is unique_lock unlocked on destruction if we already unlocked it by hand?如果我们已经手动解锁了 unique_lock 是否会在销毁时解锁?
【发布时间】:2019-08-10 08:32:24
【问题描述】:

即使我手动调用unlock 是否会在销毁时调用unique_lock::unlock() 函数,以便在给定互斥锁上接收到两次解锁信号?

【问题讨论】:

    标签: c++ multithreading locking mutex


    【解决方案1】:

    不是。

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

    解锁互斥锁。

    互斥锁必须被当前执行线程锁定, 否则,行为未定义。

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

    【讨论】:

      【解决方案2】:

      不,它不会尝试解锁。如果你看unlock,它

      确保:owns == false

      the destructor

      效果:如果owns调用pm->unlock()

      所以由于unlock 释放了所有权,析构函数不会尝试解锁它。

      【讨论】:

        【解决方案3】:

        没有。 见documentation

        如果*this 有一个关联的互斥体并且已经获得了它的所有权,那么 互斥锁已解锁。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-16
          • 1970-01-01
          • 1970-01-01
          • 2013-08-28
          • 2021-11-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多