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

试图了解何时可以在var data = { requests: [{ id: 'p1',isOptional: false,item: [Object] },{ id: 'p1',item: [Object] } ] } var unique = [...new Set(data.requests.map(({id}) => id))].map(e => data.requests.find(({id}) => id == e)); console.log(unique )上使用shared_lock,反之亦然。 C ++文档非常神秘!我知道,一般准则是如果我们希望立即进行范围内(或RAII)互斥,则在两者之间使用unique_lock

这与lock_guard有关系吗?如果我没记错的话,我已经看到这三个都在使用。

我已经看到了关于堆栈溢出的一个问题,但与此类似,但避免在此处回答此问题: https://stackoverflow.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

iCMS 回答:C ++中unique_lock和shared_lock有什么区别

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

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

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

本文链接:https://www.f2er.com/1810247.html

大家都在问