[英]what does lock_guard always owns the lock mode of the referenced mutex mean?
我在读这文章上互斥。 它说
lock_guard和unique_lock之间的最大区别是lock_guard始终拥有引用的互斥锁的锁定模式,而unique_lock没有。 确实,unique_lock甚至可能没有引用互斥量。
到目前为止,我仅了解的是,当我们需要构造一个锁但不锁定互斥锁时,可以使用std::unique_lock
。 它是std::lock_guard
的改进版本,除此之外,我看不出太大区别。 如果有人能解释拥有引用互斥锁的锁定模式是什么意思,我将不胜感激。
使用std::unique_lock
,可以在构造函数中指定option。
http://en.cppreference.com/w/cpp/thread/unique_lock/unique_lock
有三个选项std::defer_lock_t
, std::try_lock_t
和std::adopt_lock_t
。 std::defer_lock_t
不锁定关联的互斥锁。
std::try_lock_t
尝试通过调用m.try_lock()
锁定相关的互斥锁而不会阻塞。 如果当前线程已经拥有该互斥锁,则该行为是不确定的,除非该互斥锁是递归的。
std::adopt_lock_t
假定调用线程已经拥有m。
如果未指定任何选项(例如,仅使用互斥量参数调用构造函数)-互斥量只是通过mutex.lock()
函数锁定。
使用std::lock_guard
,只能指定一个选项( std::adopt_lock_t
), std::adopt_lock_t
互斥锁将通过锁定功能lock
。
在所有这些情况下,如果mutex
被锁定,则在lock_guard
/ unique_lock
析构函数中,互斥锁将通过调用mutex.unlock()
函数来解锁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.