我有一个线程更新 int 而另一个线程在某个时候读取它的情况。所以单读单写。到目前为止,我volatile
为此目的使用 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
writer 简单地增加 int 更高效吗?
谢谢