C++中unique_lock和shared_lock有啥区别

Posted

技术标签:

【中文标题】C++中unique_lock和shared_lock有啥区别【英文标题】:What's the difference between unique_lock and shared_lock in C++C++中unique_lock和shared_lock有什么区别 【发布时间】:2020-08-04 04:46:18 【问题描述】:

试图了解何时可以使用shared_lock 而不是unique_lock,反之亦然。 C++ 文档非常神秘!我知道,如果我们希望立即、范围(或 RAII)互斥,一般准则是在两者上使用 lock_guard

这和condition_variable 有关系吗?如果我没记错的话,我已经看到这三个都被使用了。

我看到了一个类似的堆栈溢出问题,但在这里避免回答这个问题: https://***.com/questions/33770500/when-to-use-c11-mutex-lock-unique-lock-shared-lock-etc#:~:text=lock_shared()%20is%20a%20function,the%20end%20of%20the%20scope.

【问题讨论】:

【参考方案1】:

其实很简单。 unique_lock 在互斥体上调用 lock()shared_lock 打电话给shared_lock()

它们之间的区别在于shared_lock 旨在支持读/写锁中的读者。您可以让多个线程都获取共享锁并读取相同的数据,但是如果有人要写入数据,则需要使用lock获得写入数据的权限。

您应该使用哪一种取决于您正在寻找的模式。很多时候需要读/写锁(这就是标准包含对它们的支持的原因)。有时也需要一个简单的唯一互斥锁。一般来说,如果读写对您来说是有意义的概念,那么像shared_timed_mutex 这样的读/写互斥锁很有可能是正确的方法。

【讨论】:

以上是关于C++中unique_lock和shared_lock有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

linux C++互斥锁std::lock_guard(轻锁)std::unique_lock(重锁)区别

linux C++互斥锁std::lock_guard(轻锁)std::unique_lock(重锁)区别

c++ unique_lock lock_guard

C++ 有 mutex.lock 为什么要用 lock_guard unique_lock

C++ boost共享锁 unique_lock shared_lock

C++基础 多线程笔记