繁体   English   中英

boost :: unique_lock和boost :: upgrade_lock之间的区别?

[英]Difference between boost::unique_lock and boost::upgrade_lock?

我是C ++中线程概念的新手。 我只是想知道一些事情: boost::unique_lockboost::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_lockunique_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM