多くの開発者が知っているように、インクリメント オペレーターはアトミックではありません。
例えば:
public void incrementId(){ // id being an int field
id++;
}
実際には、これは 3 つの異なる操作に対応します。
int temp = id;
id = id + 1;
id = temp;
さらに、このメソッドは同様に動作します。
public void incrementId(){ // id being an int field
id = id + 1; // three steps also here
}
私の質問は:
両方の操作に従うことの舞台裏の本当の違いは何ですか:
id = id + 1; //three steps => non atomic
id = anotherIntVariable + 1; // one step => atomic
コンパイラが最初のステップを 3 つのステップに変換し、他のステップを変換しないようにするのは、どのような概念ですか?