今日私はこの質問に出くわしました:
あなたはコードを持っています
static int counter = 0;
void worker() {
for (int i = 1; i <= 10; i++)
counter++;
}
worker
2つの異なるスレッドから呼び出された場合counter
、両方が終了した後、どのような値になりますか?
私は実際にそれが何でもあり得ることを知っています。しかし、私の内部の内臓は、それcounter++
はおそらく単一のアセンブラー命令に変換され、両方のスレッドが同じコアで実行さcounter
れる場合、20になると言っています。
しかし、これらのスレッドが異なるコアまたはプロセッサで実行されている場合、マイクロコードに競合状態が発生する可能性はありますか?1つのアセンブラ命令は常にアトミック操作と見なすことができますか?