[英]Is java.util.concurrent.CountDownLatch.countDown() atomic?
我需要保證java.util.concurrent.CountDownLatch.countDown()
是原子的。
我在finally
塊中調用countDown
,所以我確信我正確使用它。 偶爾雖然我看到一兩個優秀的鎖存器,盡管我認為應該沒有。
(我沒有設法通過檢查Java源代碼進行驗證。)
我需要保證java.util.concurrent.CountDownLatch.countDown()是原子的。
我向你保證,它絕對是原子的。 如果不是,這將是一個關鍵的錯誤。 如果您調試代碼,我希望您會發現代碼問題。
(我沒有設法通過檢查Java源代碼進行驗證。)
這是代碼跟蹤:
public void countDown() {
sync.releaseShared(1);
}
sync
默認實現是:
public boolean tryReleaseShared(int releases) {
// Decrement count; signal when transition to zero
for (;;) {
int c = getState();
if (c == 0)
return false;
int nextc = c-1;
if (compareAndSetState(c, nextc))
return nextc == 0;
}
}
compareAndSetState
調用,它使用支持AtomicInteger
和許多其他類的相同Unsafe
類。
return unsafe.compareAndSwapInt(this, stateOffset, expect, update);
如果它被破壞,則java.util.concurrent
大部分被破壞。
它是java.util.concurrent
的數據結構的事實是一個死的贈品,但Java代碼使用AbstractQueuedSynchronizer
來幫助實現原子操作,並且一旦您閱讀了排隊的同步器的API,實現就非常簡單。 這絕對是原子的:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.