gpt4 book ai didi

java - 增加 int 计数器的可见性

转载 作者:行者123 更新时间:2023-12-01 09:37:26 24 4
gpt4 key购买 nike

我遇到一种情况,一个线程更新 int,而另一个线程在某个时刻读取它。所以单读者单作者。到目前为止,我一直在使用 volatile int 来实现此目的,但由于这会强制内存屏障完全同步,所以我正在考虑其他事情。

一种方法是AtomicInteger.incrementAndGet()但我认为这具有完全相同的效果,而且实际上会更慢

另一种方法是使用 AtomicInteger.lazySet 以及额外的非 volatile 计数器来供编写器使用。所以基本上我们会有

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 更高效吗?

谢谢

最佳答案

如果惰性增量是您的选择之一,我建议您使用LongAdderlinkLongAdder 适合多线程更新。

... under high contention, expected throughput of this class is significantly higher (than AtomicLong)

关于java - 增加 int 计数器的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38742666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com