私は Java API java.util.concurrent.atomic、特にAtomicIntegerクラスを調べてきました。
メソッドのコメントは、これらのメソッドがアトミックであることを示しています。
たとえば、 getAndIncrement ()を使用します。
public final int getAndIncrement() {
for (;;) {
int current = get();
int next = current + 1;
if (compareAndSet(current, next))
return current;
}
}
文書化されているように、これは「現在の値を原子的に1ずつインクリメントする」です。
このメソッドをアトミックにしているのは正確には何ですか? 私が見たところ、それは完全に「非アトミック」です-その実行に関与する多くのサイクルと、ステートメントの実行中
int next = current + 1;
たとえば、nextの値は別のスレッドで設定できます。