C++中unique_lock和shared_lock有什么区别

What's the difference between unique_lock and shared_lock in C++

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

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

我看过一个关于堆栈溢出的类似问题,但在这里避免回答这个问题: .

真的很简单。 unique_lock 在互斥量上调用 lock()shared_lock 呼叫 shared_lock().

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

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