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

Rya*_*uza 5 c++ multithreading mutex

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

这有什么关系吗condition_variable?如果我没记错的话,我见过这三个都与此一起使用。

我看到了一个关于堆栈溢出的问题,该问题类似,但避免在这里回答这个问题: https ://stackoverflow.com/questions/33770500/when-to-use-c11-mutex-lock-unique-lock-shared-lock -etc#:~:text=lock_shared()%20是%20a%20函数,%20%20范围的%20end%20。

Cor*_*ica 6

这真的很简单。 unique_lock调用lock()互斥体。 shared_lock来电shared_lock()。

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

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