【发布时间】:2013-11-15 07:57:30
【问题描述】:
Stack Overflow 有几个examples,其中一个函数获得可升级锁首先,然后通过升级获得独占访问。我的理解是,如果不小心使用,这可能会导致死锁,因为两个线程可能都获得可升级/共享锁,然后都尝试升级,此时两者都无法继续,因为另一个线程具有共享锁.
我想要的是先获得独占锁,然后在不完全释放锁的情况下降级为共享锁。我找不到这样的例子。有什么想法吗?
【问题讨论】:
-
我可能已经过时了这些酷孩子,但我认为通常的模式是尝试升级,如果失败,则完全释放锁定并重新开始。显然这有其缺点,但死锁不是其中之一:-)
-
两个线程无法获得可升级锁。任何时候都只能持有一个可升级锁。这就是它可以升级的原因:它会阻塞升级,直到当前的共享锁被释放。
-
@Ben,这与 unique_lock 有何不同?
-
不同之处在于您可以拥有可升级的锁而其他人拥有共享锁。你不能拥有唯一锁而其他人拥有共享锁。
-
所以我可以直接使用已有的例子,获得升级锁后立即升级吗?
标签: c++ boost-thread boost-mutex