線形化可能性
線形化可能なアトミックカウンタオブジェクトを実装するために,これまでの実装を変更し,各プロセスPiが独自のレジスタRiを使用するようにする。
各プロセスは、以下のアルゴリズムに従ってインクリメントとリードを行う。
インクリメント
レジスタRiの値を読み込む
その値に1を加える
新しい値をRiに戻す
読み込み
レジスタ R1,R2...Rn を読む
すべてのレジスタの合計を返す
この実装では最初の実装の問題点が解決されている。このシステムでは、インクリメント演算は書き込みステップで線形化されている。インクリメント演算の線形化可能性ポイントは、その演算がレジスタRiに新しい値を書き込むときとなる。読み取り操作は、読み取りによって返された値が、各レジスタRiに格納されたすべての値の合計に等しいとき、システムのある時点で線形化される。
これは些細な例ではあるが、実際のシステムでは操作はより複雑になり、導入されるエラーも極めて微妙なものになる。例えば、64ビットの値をメモリーから読み出す場合、実際には2つの32ビットのメモリーロケーションを2回連続して読み出すように実装されることがある。プロセスが最初の32ビットだけを読み取った後、2番目の32ビットを読み取る前にメモリー内の値が変更された場合、元の値でも新しい値でもなく、混ざった値を持つことになる。
さらにプロセスの実行順序によっても結果が変わってしまうため、このようなエラーの検出、再現、デバッグは困難である。