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 互斥锁很有可能是正确的方法。
试图了解什么时候可以使用 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 互斥锁很有可能是正确的方法。