[OSASK 5158] Re: mtl_end

  こんばんは、川合です。


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/


ML番号でジャンプ
ML単語検索