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

Inv*_*tus 7 c++ boost boost-thread

我是C++中线程概念的新手.我只是想知道几件事情:如何是boost::unique_lock从不同boost::upgrade_lock

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

也许可以说独占所有权是线程安全但不是升级所有权,在这种情况下我想知道升级所有权如何可能是有害的?我想知道什么是upgrade_lock允许或 unique_lock不允许除了独占锁定的东西.不提供排他性锁定 upgrade_lock使它类似于shared_lock什么,如果是,那么它与它有什么不同shared_lock

小智 6

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.


How*_*ant 5

@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,反之亦然.它只是工具箱中的另一个工具.