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

时间:2012-02-12 07:04:17

标签: c++ boost boost-thread

我是C ++中线程概念的新手。我只想知道一些事情: boost::unique_lockboost::upgrade_lock的区别如何?

独家所有权实际上与升级所有权有何不同。

也许有人可以说独占所有权是线程安全但不是升级所有权,        在这种情况下,我想知道如果升级所有权如何可能是有害的        有可能?我想知道upgrade_lock允许或不允许的内容        unique_lock除了排他锁定之外的事情。不提供独家锁定        upgrade_lock使其与shared_lock类似,或者如果是,那么它是如何实现的        与shared_lock不同?

2 个答案:

答案 0 :(得分:5)

  

@Xeo是的upgrade_lock可以升级为uniue_lock   upgrade_yo_unique_lock。那么为什么我们需要shared_lock就是因为   shared_lock无法升级到unique_lock?那是唯一的吗?

shared_mutex仅存在 以提供传统读/写互斥锁的功能。一些客户可能会理解为互斥锁将模式从一个变为另一个,但仍然需要rw / mutex的传统功能。这是shared_mutex的作用。

其他客户会查看shared_mutex并说:我想要更多。我想有时将我的所有权从共享升级为独占。这是upgrade_mutex的作用。 upgrade_mutex并不比shared_mutex好,反之亦然。它只是工具箱中的另一个工具。

答案 1 :(得分:4)

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运作。