繁体   English   中英

lock_guard始终拥有引用的互斥锁的锁定模式是什么意思?

[英]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_tstd::try_lock_tstd::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM