我是C ++中线程概念的新手。我只想知道一些事情: boost::unique_lock
与boost::upgrade_lock
的区别如何?
独家所有权实际上与升级所有权有何不同。
也许有人可以说独占所有权是线程安全但不是升级所有权,
在这种情况下,我想知道如果升级所有权如何可能是有害的
有可能?我想知道upgrade_lock
允许或不允许的内容
unique_lock
除了排他锁定之外的事情。不提供独家锁定
upgrade_lock
使其与shared_lock
类似,或者如果是,那么它是如何实现的
与shared_lock
不同?
答案 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_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
运作。