アトミック性
CPUが処理するような命令は細かい単位に分割されているが、分割しすぎるとデータ競合の原因になることがある 例えば、load, calc, storeが3つに分割されていると、2つのプロセスが同じメモリ領域に対して処理を行う際に
code:process
// 以下の処理は全て同じアドレスに対して行っている
①Aがload // 値を取得
②Aがcalc // (+2)する
③Aがstore // 値を保存
④Bがload // 値を取得
⑤Bがcalc // (*2)する
⑥Bがstore // 値を保存
これらは順番に依存している
開始時は1が入っていて①~⑥まで順に実行すると最終的には6になるが、
①④②③⑤⑥のように実行されると、Aの処理は無になり、最終的に2になる
なので、この3つの命令は分割してはいけなく、3つで一つの処理として扱いたい
このことをクリティカルセクションと呼ぶ(?)
OSなのか、ローカルPCなのか、コンテキストによってアトミック性は変化する
例えばi++;のコードだけを見ても「iの値を取得」「iををインクリメント」「iの値を保存」などの処理が含まれる
分割不能
中断不可