Next: Up: Previous:

オブジェクト内並列が存在する並列オブジェクト指向言語

これまでのオブジェクト内並列が存在する並列オブジェクト指向言語 を以下で再考する. 多くの提案は安全でないか, 適当でない.

安全でなく, 排他的でないメソッド

メソッドの原子性を保証しない言語 [6], [10], [15], [17], [26], および, 安全でない非排他的なメソッドを提供する (言い換えれば, 現在のメソッドに割り込むメッセージ [30] を「表現」する)言語 [5], [8], [27], [28] がある. どちらの場合にしても, そのようなメソッドの存在下で, あるメソッドが 一貫性のないオブジェクトの状態を決して読みださないことを保証するのは プログラマの責任である. 他のメソッドが並列に同じオブジェクトを 更新しているならば, メソッドはもはや原子的とは言えない. 排他的であると宣言されているメソッドも他の非排他的なメソッドに 中断されることがありうることに注意してほしい. これは並列オブジェクト 指向言語の最も重要な利点のうちの一つを失わせる.

変数単位の排他制御

この方法は ICC++ で提案された [10]. ICC++ はオブジェクトに対するメソッドの組がserializeされるかされないかを メソッドのボディのインスタンス変数を検査することによって決定する. 二つのメソッドの間に読みだし/書き込みの衝突, または書き込み/書き込みの 衝突が存在する時またその時に限りそれらの実行はserializeされる. このモデルは多くのアルゴリズムの自然な記述を可能にするが, 効率的な実装には障害が多いように思われる. このモデルを一般的に 実装することは一つのオブジェクトに対する複数のロックを必要とする. ほとんど起こらないものの, 最悪の場合には, クラスのオブジェクトはインスタンス変数と同じ数のロックを持つ. より実際的な問題としては, ロックの数を最適化することはメソッド内の インスタンス変数の使用に関する大域的な情報を必要とする. これは分割コンパイルを難しくする.

オーバーラップするメソッド

UFO [22], [23] や SYMPAL [2] のような最近の言語は 現在のメソッドとひき続くメソッドの間のオーバーラップを 保証している. つまり, 現在のメソッドがそのオブジェクトへの 最後の更新を行なうとすぐに, 現在のメソッドの残りの部分の 実行はひき続くメソッドの起動と安全にオーバーラップする. 実装のレベルでは, メソッドはメソッドの終了よりも早く そのオブジェクトを「アンロック」する. UFO と SYMPAL は このタイプの並列性を言語のセマンティクスとして保証しており, 我々の提案するオブジェクトモデルでも同じ機構を採用している. 2.2.3節では, アンロックのタイミングに関するこの明らかな小さな変更が 並列性とデッドロックしないプログラムの範囲に大きな影響を 与えることを述べる.



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