在什么情况下会使用release
的{{1}}方法?
我错误地使用std::unique_lock
方法而不是release
方法,并且花了一些时间来理解为什么下面的代码无效。
unlock
答案 0 :(得分:6)
在this answer中有一个很好的用途,其中锁定状态的所有权明确地从函数本地unique_lock
转移到外部实体(by-reference Lockable 参数)。
此具体示例是典型的用法:将锁定状态的所有权从一个对象(甚至类型)转移到另一个对象。
答案 1 :(得分:5)
.release()
非常有用,当你想要保持互斥锁被锁定,直到某个其他对象/代码决定解锁它为止...例如,如果你正在调用一个需要锁定互斥锁的函数并将其解锁在该函数的处理中的某一点,其中该函数仅接受std::mutex&
而不是std::unique_lock<std::mutex>&&
。 (概念上类似于智能指针释放功能的用途。)