需要同步仅增量计数器?

2022-09-01 11:27:20

我使用整数作为计数器。整数只会增加,并且肯定不止一个线程会同时增加它。此计数器的值在程序执行结束时读取,当没有其他线程将尝试访问其值时。

我假设我不必对这种仅递增计数器使用锁或任何类型的同步。这是对的吗?我用Java编写代码,如果这有什么区别的话。


答案 1

如果您只使用或变量,那么您将需要同步 - 增量涉及读取/局部增量/写入,这与原子操作相去甚远。(即使变量是为了避免内存模型对过时的担忧,你仍然有三个不同的操作,并且有可能在任何一对之间被抢占。intlongvolatile

幸运的是,Java提供了AtomicIntegerAtomicLong可以在没有任何同步的情况下使用:

private final AtomicLong counter = new AtomicLong();

...

counter.incrementAndGet(); // No need for synchronization

答案 2