我有一種情況,一個線程更新int,另一個線程讀取它。所以單讀者單寫作者。 到目前爲止,我使用的是volatile
int,但是由於這會強制完全同步內存障礙,所以我在考慮其他的東西。增加int計數器的可見度
一種方法是AtomicInteger.incrementAndGet()
但我認爲這具有完全相同的效果,實際上是慢
另一種方法是使用AtomicInteger.lazySet
額外非易失性計數器作家。 所以基本上我們必須
private int counter;
public AtomicInteger visibleCounter = new AtomicInteger();
private void write() {
counter++
visibleCounter.lazySet(counter)
}
// called by reader
public int isCountEqual(int val) {
return val == visibleCounter.get()
}
的天真 「lazyIncrement
」。
實際上是否比作者的簡單增量volatile
int更高性能?
感謝
這聽起來像一個非常奇怪的方式就不多說了非常錯誤的,你爲什麼需要這樣做?你的應用程序中是否存在與此有關的性能問題? –
因此,如果讀者讀取舊值,這對您來說不是問題? – Kayaman
不,這不是一個問題,只要在某個點10ms等我會得到正確的結果,即val == visibleCounter – ivenhov