こんばんは、川合です。 I.Tak. さんは 2002/10/15 16:35:15 の「[OSASK 5155] mtl_end」で書 きました: > いずれかのスレッドがシグナルを受け取らないとmtlが混乱してし >まうということでしたけど、あるスレッドが終了したあとも、その >スレッドが受け持っていたシグナルが来る可能性はありますよね? >(一般的には) はい、ありますねえ。ちょっと盲点でした(説明上の盲点という意味 です)。これについては後述します。 > 来ないことがわかっているシグナルというと、定義しない >シグナル (hogeの初期化完了シグナルとか) ぐらいでしょうか。 >この類のシグナルを扱うスレッドのために mtl_end はあるのだ、 >ということでいいんですか? 一回しか来ないシグナルのために >スレッドを作るのはもったいない気がしますが。 ええとそのmtl_endの使い方は僕の想定している方法ではないです。 たとえば、各スレッドは処理担当シグナルとして1〜9999、10000〜19 999などの範囲を割り振られます。そんでもって、○○の初期化完了シ グナルとかだって、その初期化を指示したスレッドに受け取らせればい いでしょう。 具体的には、スレッドAがファイルオープンをやったのなら、その完 了シグナルはスレッドAが受け取るべきです。もちろん他のスレッドに 受け取らせることもできますが、かえってプログラムが混乱するので はないかと僕は思います。 --- それで予期しないシグナルが来た場合どうなるかですが、実は親スレ ッドに渡されます。親スレッドというのは、mtl_init()を実行したスレ ッドのことです。・・・いや違った、最初にmtl_start0()を実行したス レッドです。・・・いやこれも違った、最初にmtl_getsig2()を実行し たスレッドかな?(まあどれでも同じ事だと思いますが)。 ということで予期しないシグナルに備えるなら、親スレッドは仕事が なくなってもmtl_end()しちゃいけません。それに親スレッドは、自分 が範囲指定しないシグナルも受け取るかもしれないことを、覚悟しなけ ればいけません。 とまあ、今はそんな仕様になっています。不便でしたらごめんなさい 。 それでは。 -- 川合 秀実(KAWAI Hidemi) OSASK計画代表 / システム設計開発担当 E-mail:kawai !Atmark! imasy.org Homepage http://www.imasy.org/~kawai/