shared_lock
的析构函数解锁关联的互斥体之外,shared_mutex.lock_shared()
和 shared_lock
之间还有什么区别?shared_mutex
是我可以与shared_lock
一起使用的唯一互斥类吗?lock_guard
而不是 unique_lock
?shared_lock
) 一个变量,并且我有一个尝试锁定它以进行写入 (unique_lock
) 的变量,则该写入线程是否比其他线程具有优先级?shared_mutex.lock_shared()
是一个在共享模式下锁定 shared_mutex
的函数调用,而 shared_lock
是一个“锁定类”,用于在作用域末尾锁定和自动解锁互斥锁。不,您可以将
shared_lock
与满足 SharedMutex 要求的任何类型一起使用。始终使用
lock_guard
,除非您需要 unique_lock
的附加功能。这样你的意图就更明确了。这不取决于
shared_lock
或 unique_lock
,而是取决于您使用的 SharedMutex
。标准未指定确切的行为。但这里有一些线索:
shared_lock
通常会使用 SRWLOCK
来实现,并尽量公平,例如会尽力平衡读者和作者。这里没有人会拥有更高的优先权。shared_mutex
最有可能在 pthread_rwlock_t
之上实现,并且实现通常优先考虑读者,因为它要求支持递归读锁。shared_mutex
力求公平,不偏袒任何一方。对于读者优先
shared_mutex
,如果始终至少有一个读者持有锁,那么您的编写器线程可能永远不会获取锁。