c++ - boost::unique_lock 与 boost::lock_guard

标签 c++ boost locking

我不太了解这两个锁类之间的区别。 在 boost 文档中说,boost::unique_lock 不会自动实现锁定。

这是否意味着 unique_locklock_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/

相关文章:

c++ - 来自抽象基础的反序列化无法 boost 序列化

concurrency - GPars 锁返回 null

c# - 具有多个数据库调用的方法的线程安全

perl - 使用 Fcntl : Baffling bug involving 'use' and 'require' 锁定文件

c++ - 如何使用Winsock 2?

c++ - 将创建多少个对象?

c++ - 在 LLVM 中获取非常量操作数

c++ - 右值引用在这里如何工作?

c++ - 如何使 equal_range 迭代器按 Boost Multi-index 中的不同索引排序?

c++ - Boost 文件系统存在访问冲突