Next: Up: Previous:

可能な work around

current_value メソッドが常に進行することを システムが保証しないならば, いくつかの可能な work around が 存在する. それらの work around はどれも自然, 一般的でない.

多くの言語は明示的にメソッドを serialize しないことを 明示するアドホックなコンストラクトをサポートしている [8], [27], [28] (もしくは, 同値だが, いくつかの言語 [5], [7] はデフォルトでは 一つのオブジェクトへの複数のメソッドを serialize せず, メソッドが serialize されることを明示する方法を提供している). ひとたび明示された時には, メソッドがオブジェクトの一貫性のない 状態を決して読まないようにすることはプログラマの責任である. 幸運にも, 上の例では, current_value が serialize しない ことを明示することでうまくいく. なぜならば, マシン命令レベルでは, current_value メソッドはおそらく原子的なロード 命令によって value を読むからである. しかし, current_value が二つもしくはそれ以上のインスタンス変数を 読むならば, プログラマはこれら二つの読みだし操作の間に 全く改変がはさまらないことをもはや信頼することはできない. この種の オブジェクトへの保護されないアクセスの安全は良くても 実装依存である.

もう一つの選択肢に, 各緩和ステップを二つのフェーズに分けるものが ある. 最初のフェーズは奇数に番号づけされた場所にあるオブジェクトを 更新し, 二番目のフェーズではそれ以外を更新する. もし オブジェクトのグラフがより不規則であるならば, これはうまく 機能しない. さらに他の work around としては, 各オブジェクトを 二つのサブオブジェクトに分割する. それらの一つは value 変数 へのアクセスを提供する. これは非常に書くのが不便で, 非効率的である.



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