如果我获得了许多锁,我如何以原子方式释放锁定组?
答案 0 :(得分:5)
我很困惑你为什么需要原子地释放它们。 原子地获取它们,我能理解,虽然这样做的代码将是一个奇怪的野兽 - 一个干净的方法是将它们隐藏在主锁管理器后面的所有代码中,并同步它。但是什么代码会关心两个锁是一次性释放还是根本没有?
答案 1 :(得分:2)
看看JDK中的java.util.concurrent包描述,也许你会找到合适的sync primitibe。你问题中的信息不足以给出更具体的答案。
一种简单的方法(但可能不是最有效的方法)是使用'uberLock'来保护所有需要的锁,例如:
private final Lock uberLock = new ReentrantLock();
void lockAll() {
uberLock.lock();
try {
// call lock() on all needed locks
} finally {
uberLock.unlock();
}
}
答案 2 :(得分:2)
由于锁被视为独立对象(参见this question)而Java语言没有(但据我所知)在其JVM中提供了一种方法(必须将其实现为原子级的) )只需一步即可释放多个锁,这根本不可能。
也许可以重新设计您的应用程序,以便不再需要几个锁的原子释放。 (也许您还可以提供有关您的具体问题的更多详细信息,以便我们更好地理解)