如何获取排他锁**然后降级到共享而不释放锁

Ell*_*ron 5 c++ boost-thread boost-mutex

堆栈溢出有几个例子,其中一个函数获得的升级第一然后获得由升级的独占访问.我的理解是,如果不小心使用,这导致死锁,因为两个线程都可以获得可升级/共享锁,然后两者都尝试升级,此时两者都不能继续,因为另一个具有共享锁.

我想要的是首先获得独占锁,然后降级到共享锁,而不完全释放锁.我找不到这样的例子.有任何想法吗?

Com*_*sMS 4

Boost 通过UpgradeLockable概念提供此功能。您正在寻找的方法是unlock_and_lock_shared().

这个概念的实现由类提供upgrade_mutex