[英]std library equivalent to boost::upgrade_lock and boost::upgrade_to_unique_lock
[英]Difference between boost::unique_lock and boost::upgrade_lock?
我是C ++中线程概念的新手。 我只是想知道一些事情: boost::unique_lock
与boost::upgrade_lock
什么不同?
独家所有权实际上与升级所有权有何不同。
也许可以说独占所有权是线程安全但不是升级所有权,在这种情况下我想知道升级所有权如何可能是有害的? 我想知道upgrade_lock
允许或不允许unique_lock
除了独占锁定之外的内容。 不通过upgrade_lock
提供独占锁使其类似于shared_lock
或者如果是,那么它与shared_lock
有何不同?
@Xeo是可以通过upgrade_yo_unique_lock将upgrade_lock升级为uniue_lock。 那么为什么我们需要shared_lock是因为shared_lock无法升级到unique_lock? 那是唯一的吗?
是。
shared_mutex
仅用于提供传统读/写互斥锁的功能。 一些客户可能会理解为互斥锁将模式从一个变为另一个,但仍然需要rw / mutex的传统功能。 这是shared_mutex
的作用。
其他客户将查看shared_mutex
并说:我想要更多。 我想有时将我的所有权从共享升级为独占。 这就是upgrade_mutex
的作用。 upgrade_mutex
并不比shared_mutex
,反之亦然。 它只是工具箱中的另一个工具。
upgrade_lock
和unique_lock
之间的区别很简单。 unique_lock
的实例正在获取shared_mutex
的完全独占所有权。 这意味着当unique_lock
存活时,没有其他人可以获得任何类型的所有权。
与unique_lock
不同, upgrade_lock
的实例正在获取升级所有权,该升级所有权仅在尝试获得相同升级所有权的线程中独占。 尝试获取共享所有权的所有其他线程可以获得它而不会发生冲突,直到upgrade_lock
升级为唯一(具有upgrade_to_unique_lock
实例)。
当一些线程只能是读者并且不会尝试将自己提升为编写者时, upgrade_lock
很有用。 否则(所有读者可能会尝试在某些时候成为编写者) upgrade_lock
将作为unique_lock
运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.