next up previous contents index
Next: 読出し処理によるループ Up: ループへの対処 Previous: 問題点

解決方法

%read に 転送可能カウンタを持たせることで解決した. %read の参照先がジェネレータ外部参照オブジェクトの場合, カウンタ値が 1 以上ならば -1 して転送する. 0 ならば転送は行わず, リプライ・オブジェクトを生成してフックし generate メソッドを呼び出す.

これらの処理により転送の終了が保証できる. ループに %read が入り込んだ場合, ループを構成するジェネレータ(群)の少なくともひとつはコンシューマに変わるので, いつかコンシューマのフックする変数に出会い転送は終了するからである. カウンタの初期値を適当な値, 例えば, ノード台数に設定することによって, %read を最初に送信したノードに %answer_value がいつでも 直接返ることが期待できる.



Sekita Daigo
1998-05-18