next up previous contents index
: 相互排除と同期 : 並列処理機能 : 並列処理機能   目次   索引

並列構文

(future 《式》) 【特殊フォーム】

《式》を評価するための子プロセスを生成する.そしてpromiseを生成 して返す.子プロセスは《式》を評価すると,promiseの値を《式》の値に決定し,終了する.一方, future式を評価した親プロセ スは,子プロセスの終了を待たずに future式以降の評価を続ける.プロ セスがpromiseの値を必要とした場合は,promiseの値が決定されるまでそのプロ セスはサスペンドされる.

(touch 〈データ〉) 【関数】

引数が future式の生成したpromiseであれば,値が決定されるまで待ち, その値を返す.そうでなければ,引数をそのまま返す.

(premature-return 〈関数〉《式$_{1}$$\cdots$《式$_{n}$》) 【マクロ】

各《式$_{i}$》ごとにpromiseを用意し,これらを引数として〈関数〉を呼び出す.そしてその値を返す. これと同時に《式$_{1}$$\sim$《式$_{n}$》を評価するた めのプロセスを生成し,対応するpromiseの値を《式$_{i}$》の値に決 定する.

futureによって premature-return式を表現すると
(〈関数〉 (future 《式$_{1}$》) $\cdots$ (future 《式$_{n}$》))
となる.しかし premature-return式と future 式ではプロセスの扱い方が異なる. future式ではその引数の式を評価す るためにプロセスを生成する.しかし premature-return式では, premature-return式を評価したプロセスが《式$_{1}$$\sim$《式$_{n}$》のうちの1つを評価する.そして〈関数〉の評価と premature-return式以降の処理を行なうために新たにプロセスを生成する. このプロセスの扱い方の相違は実行時間に影響する. 親プロセスが子プロセスの終了を待つためにサスペンドするような場合, premature-return式は future式より$P$だけ実行時間が短くなる(ここ で$P$はプロセスの生成に必要な時間である).一方,親プロセスがサスペンド しない場合は逆に$P$だけ実行時間が長くなる. またプロセスの生成がネストする場合は,親プロセスがサスペンドする場合, future式よりも$nP$だけ実行時間は短縮され($n$はネストの深さ), 親プロセスがサスペンドしない場合はネストの深さに関係なく$P$だけ実行時 間が長くなる.このように多くの場合, premature-return式は future式より実行時間を短縮することができる.

(pif 《条件》《式$_{1}$》[《式$_{2}$》]) 【マクロ】

2つのプロセスを生成し,《式$_{1}$》と《式$_{2}$》を並列 に評価する. pif式を評価した現在のプロセスは《条件》を評価 し,その値が #f以外なら《式$_{2}$》を評価するプロセスを 殺し,《式$_{1}$》の値を返す.《条件》の値が #fな ら《式$_{1}$》を評価するプロセスを殺し,《式$_{2}$》の 値を返す.《式$_{2}$》が与えられていなければ ()を値として 返す.

(por 《式$_{1}$$\cdots$《式$_{n}$》) 【マクロ】

《式$_{1}$$\sim$《式$_{n}$》を並列に評価し,いずれか の値が #f以外の値であれば他のプロセスを殺し,その値を返す. 《式$_{1}$$\sim$《式$_{n}$》の値がすべて #fな ら #fを返す.

(pand 《式$_{1}$$\cdots$《式$_{n}$》) 【マクロ】

《式$_{1}$$\sim$《式$_{n}$》を並列に評価し,いずれか の値が #fであれば他のプロセスを殺し, #fを返す. 《式$_{1}$$\sim$《式$_{n}$》のどの値も #fでなかっ たら,《式$_{1}$$\sim$《式$_{n}$》のいずれかの 値を返す.



Tsuneyasu KOMIYA 平成14年2月22日