Next:
Up:
Previous:
図2.3: Pointオブジェクトの表現
Herlihy
[12],
[13]
によって提案されているように, 基本アイデアは,
図2.4のように,
分割したインスタンス変数のレコードを持ち, オブジェクトを
インスタンス変数へのポインタを持ったレコード(self record)で
表現することである.
Self record は次の2つのフィールドを持っている.
- Mutex
- これは書き込みメソッドの前段階の排他制御を実現する
- インスタンス変数へのポインタ
- ポインタそのものは
1 ワードで表現されている(それらは原子的にメモリから読みだし,
メモリに書き込み可能である).
Mutex はフラグと待ちスレッドのキューからなる. 分散メモリマシン
においては, ロックの獲得はフラグのチェックと, もし獲得の
操作が失敗したときは, キューの操作である. ロックの解放では,
もしあれば, 中断していたスレッドを再開する. 共有メモリマシンでは,
上の手続きは小さいクリティカル・セクションによって保護される.
図2.4: 大きなオブジェクトの表現
2.2.4 (1)節での
簡単な point クラスのオブジェクトの可能な表現が
図2.3に図解されている.
2.2.5 (3)節で議論するように,
インスタンス変数のレコードの
表現の仕方には自由度がある. 表現の選択はインスタンス変数の
読みだし/書き込みのコストに影響を与える. どちらの場合も,
二つの重要な規則がある.
- ポインタフィールドはターゲットとなるハードウェアにおいて
原子的に読みだし可能/書き込み可能でなければならない.
- インスタンス変数のレコードそれ自身は mutable ではない.
一般に, 他のメソッドが古い状態に対して操作をしているかも
しれないので, レコードはその場で更新されることはない.
これらの2つの規則は, 読みだしオンリーのメソッドは
全く排他制御がいらず, オブジェクトの一貫性のある
状態のみを観測することを即座に保証する.
Mitsubishi Research Institute,Inc.
Mon Feb 24 19:24:01 JST 1997