|
||||||||
|
// 子関数は起動/退去依頼/退去(return)の順に行う 2009.10.15 AM 9:30 // 子プロセスは起動/呼出/閉鎖依頼/消滅(return)の順に行う // 退去依頼や閉鎖依頼は呼出で行ない、呼出はCALLマクロかBcall関数の起動で行います // 子関数は普通の自由な形式な引数を持つ関数コールのことである、サブルーチンと呼んでもいい // 子プロセスの起動とは定まった2引数を持つ関数コールのことである func(int rc, ECB*ep) // その起動された子関数が親プロセスを呼出すことにより、子プロセスが事実上発生する // 親プロセス(=親関数)は子関数(その子や孫や子孫も含め)に自身の子プロセスを呼出すことを許す // 但し、子プロセスの退去依頼や閉鎖依頼は親プロセス自身が行う必要がある // 子プロセスは同時に何個でも起動できるが、閉鎖依頼は起動の逆順に行う必要がある // 子プロセス同士の呼出は自由である、その関係は1方向付きネット構造を構成する // 子プロセス同士の2者間ではすべて上下関係を持つ(1方向の関係)、再帰関係は許されない // 子プロセス内の先頭で親プロセスを呼出す子関数を起動してはいけない // 但し、子プロセス内で親プロセスを呼出さない子関数は自由にどこで起動してもいい // 先頭以外でなら子プロセスは親プロセスを呼出す子関数を起動しても良い、 // 但し、その子関数が直接に閉鎖依頼を受け取ってはいけないので、 // 事前に退去依頼を受けるなら問題は無い、子関数から退去(return)後、子プロセス内で直接に閉鎖依頼を待つ // 親プロセスの子関数/子孫関数が、又新たな子プロセス群を起動し、その親プロセスになることは可能である // 子関数/子孫関数がそれ自身の子プロセスを呼ぶことは無論可能だが、同時に先祖の子プロセスを呼出すことも可能である // 同じ関数を用いて、同時に複数の子プロセスを起動することも可能である、一関数で、同時に複数の実体を持てるという意味 // 子関数は再帰でない限り同時に複数の実体を持つことはない // それはクラスとオブジェクトの関係と同じであり、オカレンス、又はインスタンスという概念そのものである // 親プロセスと子プロセスは対等ではないが、両者共内部では自分が親であるように振舞うことが出来る、即ち手順を組める // 親プロセスは子プロセスのハンドル(ep)を子関数に引き継ぐことにより、関数ポインタの引数の使用を避けることが出来る // 関数ポインタの引数の使用は関数ツリーを切断させ、関数のコール関係(=親子関係)を見えなくする // 親プロセスのからの起動又は呼出直後なら、子プロセスは親プロセス同様にさらにその子のロセス群を起動出来ます |