2009-09-10 35 views

回答

2

由於鎖被視爲獨立對象(請參見this question),並且Java語言沒有(但據我所知)在它的JVM中提供了一個方法(它必須實現爲真正的原子方式)才能釋放一步就鎖定多個鎖,這根本不可能。

也許有可能重新設計你的應用程序,以便不再需要幾個鎖的原子發佈。 (也許你也可以給你更具體的問題的細節,我們可以得到更好的理解)

2

看看JDK中的java.util.concurrent包描述,也許你會發現合適的同步primitibe。您的問題中的信息不足以提供更具體的答案。

一個簡單的方法(但也許不是最有效的)是使用「uberLock」守護所有需要的鎖,如:

private final Lock uberLock = new ReentrantLock(); 
void lockAll() { 
    uberLock.lock(); 
    try { 
     // call lock() on all needed locks 
    } finally { 
     uberLock.unlock(); 
    } 
} 
5

我明白的是爲什麼你需要原子釋放出來。我可以理解,雖然這樣做的代碼將是一個奇怪的野獸 - 一種乾淨的方法是將它們隱藏在主鎖管理器後面的所有代碼中,並在其上進行同步。但是什麼代碼會關心兩個鎖一次被釋放,或者根本沒有?