Next: Up: Previous:

望ましい保証並列性

全てのメソッド起動を serialize するだけの多くのオブジェクト指向言語に おいて, step を並列に起動することはデッドロックを 起こすかもしれない. 二つの隣接するオブジェクトがほとんど 同時に step メソッドを始める時に発生する. step の起動はその中で起動される current_value が 終了しなければ決して終了しない. しかし, この場合, これらの current_valuestep がオブジェクトを解放するのを 待つのだ!

他のメソッドがオブジェクトをすでに更新し始めている間でも メソッドはそのオブジェクトのインスタンス変数を読むことを 許さなければならないことを, この例は明快に示している. 言い換えれば, 読みだしオンリーのメソッドはロックフリーで あるべきである. 2.2.4節で述べるように, ABCL/f のオブジェクトモデルは インスタンス変数を更新しないメソッド(読みだしオンリーメソッド) を serialize しないことを保証している. つまり, 読みだしオンリーメソッドは他のメソッドによってブロックされない. このシステムはメソッドは決してオブジェクトの一貫性のない状態を 観測しないことを保証する -- 外側の観測者からは, まるで メソッドが serialize されているかのようにオブジェクトはふるまう.

書き込みメソッドもロックフリーにしたいと思うかも知れない. しかし, 2.2.2 (2)節で述べたように, 汎用のプログラミング言語においては, これは非常に難しく, 高コストに思える. 書き込みメソッドについては, 2.2.4 (4)節に見せるように, 部分的なオーバーラップを許している.



Mitsubishi Research Institute,Inc.
Mon Feb 24 19:24:01 JST 1997