shared_lock
的析构函数解锁相关的互斥锁之外,shared_mutex.lock_shared()
和shared_lock
之间有什么区别?shared_mutex
是唯一可以与shared_lock
一起使用的互斥类吗?lock_guard
代替unique_lock
?shared_lock
)变量并且我有一个变量试图将其锁定以进行写入(unique_lock
),那么这个写入线程是否优先于其他的?答案 0 :(得分:3)
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
的读者,如果总是有至少一个读者持有该锁,那么您的作家线程可能永远不会获得该锁。