ノンアトミック
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/30 20:34 UTC 版)
素朴で非アトミックな実装。 インクリメント レジスタRの値を読む 値に1を加える 新しい値をレジスタRに書き戻す 読み込み レジスタRの読み出し この単純な実装では線形化はできない。 値が0になるように初期化された1つのカウンタ・オブジェクトに、2つのプロセスがアクセスしているとする。 最初のプロセスは,レジスタの値を0として読み取る 最初のプロセスは値に1を加え、カウンタの値は1になるはずだが、新しい値をレジスタに書き戻す前に中断(割り込まれ)してしまい、その間に2番目のプロセスが実行される 2つ目のプロセスは、レジスタの値を読み取るが、値はまだ0になっている 2つ目のプロセスは、その値に1を加える 2つ目のプロセスが新しい値をレジスタに書き込み、レジスタの値は1になる 2つ目のプロセスは実行を終了し、1つ目のプロセスは中断したところから実行を続ける。 第1のプロセスは、他のプロセスがすでにレジスタの値を1に更新していることを知らずに、レジスタに1を書き込む 上記の例では、2つのプロセスがインクリメントコマンドを呼び出しましたが、オブジェクトの値は本来の2ではなく、0から1にしか増えなかった。システムが線形化できないために、インクリメント操作の1つが失われた。 上記の例は、データ構造の実装を注意深く考える必要があり、線形性がシステムの正しさにどのような影響を与えるかを示している。
※この「ノンアトミック」の解説は、「線形化可能性」の解説の一部です。
「ノンアトミック」を含む「線形化可能性」の記事については、「線形化可能性」の概要を参照ください。
- ノンアトミックのページへのリンク