Next: Up: Previous:

C手続き呼びだしによってスレッドを生成する

C の手続き f のボディを評価する新しいスレッドを fork したいとしよう. そのスレッドの親は通常の C の 手続き呼び出しと正確に同じ方式でパラメタを渡して単に f を呼び出す. もし f がうまく実行をブロックせずに終えたならば, 結果の値は手続き呼び出しの返り値として得られる. しかしStackThreadsでは, たとえが f ブロックしても, 制御はcallerに戻り, その場合 f の返り値は定義されていない. f がひとたび ブロックしたあとは, caller はもはやリターン後すぐにスケジュール されないかもしれないので f がCのreturn文によって 結果の値を返すことは意味を持たない. ゆえに, スレッドは caller に対して自分が終了したのか, ブロックしたのかを教え, もしブロックしたならば 二つのスレッドが以後通信する場所を教えることが しばしば必要になる. 特に, いわゆる逐次呼びだしは もしブロックの可能性があるならば, この種のプロトコルを使用して実装されなければならない. StackThreads は, 適切なプロトコルはしばしば言語独立のものであり, 時には不必要なものであるという観察に基づき, これに対するいかなる固定したプロトコルも定義していない. そのプロトコルは, 例えば, 全てのメソッド 起動が非同期メッセージによってなされ, 結果の値が 別の非同期メッセージで渡されるピュアな Actor-based 言語では不必要である. 3.2.5節では future ライクな通信プリミティブに対する 結果の値を渡すためのプロトコルの例を示す.



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