- 有什么区别
shared_lock
and shared_mutex.lock_shared()
除此之外的析构函数shared_lock
解锁关联的互斥体?
- Is a
shared_mutex
我可以使用的唯一互斥类shared_lock
?
- 为什么有人想要使用
lock_guard
代替unique_lock
?
- 如果我有很多线程不断锁定读取(
shared_lock
)一个变量,我有一个试图锁定它以进行写入的变量(unique_lock
),这个写入线程会比其他线程有优先级吗?
- 对于#4,有可能出现死锁吗?
shared_mutex.lock_shared()
是一个锁定的函数调用shared_mutex
在共享模式下,同时shared_lock
是一个“锁类”,用于在作用域末尾锁定和自动解锁互斥体。
不,你可以使用shared_lock
与任何满足的类型共享互斥体 https://en.cppreference.com/w/cpp/named_req/SharedMutex要求。
总是使用lock_guard
除非你需要额外的功能unique_lock
。这样你的意图就更明确了。
-
这不取决于shared_lock
or unique_lock
,但是关于什么SharedMutex
您正在使用。标准未指定确切的行为。但这里有一些线索:
- 在 Windows 上
shared_lock
通常会使用SRWLOCK
并努力做到公平,例如会尽力平衡读者和作者。这里没有人会拥有更高的优先权。
- 在 POSIX 系统上
shared_mutex
很可能会在之上实施pthread_rwlock_t
并且实现通常会优先考虑读者,因为它需要支持递归读锁。
- Boost
shared_mutex
力求公平,不偏袒任何一方。
符合读者喜好shared_mutex
如果总是至少有一个读者持有锁,那么您的写入线程可能永远不会获取该锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)