我不太了解这两个锁类之间的区别。
在 boost 文档中说,boost::unique_lock
不会自动实现锁定。
这是否意味着 unique_lock
和 lock_guard
的主要区别在于 unique_lock
我们必须显式调用 lock()
功能?
最佳答案
首先回答您的问题。不,您不需要在 unique_lock 上调用 lock。见下文:
unique_lock 只是一个具有更多功能的锁类。在大多数情况下,lock_guard 会做你想做的,并且足够了。
unique_lock 为您提供更多功能。例如,如果您需要超时或者如果您想将锁定推迟到对象构造之后的某个时间点,则进行定时等待。所以这在很大程度上取决于你想做什么。
顺便说一句:下面的代码片段做同样的事情。
boost::mutex mutex;
boost::lock_guard<boost::mutex> lock(mutex);
boost::mutex mutex;
boost::unique_lock<boost::mutex> lock(mutex);
第一个可用于同步访问数据,但如果要使用条件变量,则需要使用第二个。
关于c++ - boost::unique_lock 与 boost::lock_guard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6731027/