[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:771

From: Shiro Kawai <shiro lava.net>
Date: Wed, 04 Jan 2006 20:43:37 -1000 (HST)
Subject: [yarv-dev:771] Re: signal + blocking system call

From: SASADA Koichi <ko1 atdot.net>
Subject: [yarv-dev:770] Re: signal + blocking system call
Date: Thu, 05 Jan 2006 08:29:33 +0900

>  たとえば、read でブロックするようなスレッドがあった場合、一回の SIGINT
> でこれを解除することを保障するというプログラムは安全・ポータブルには書け
> ないってことなんでしょうか。

シグナルをどう使うか、という話になると思うのですが。

syscallの中断が目的ならば、そもそもシグナルはout-of-boundの
通信手段だと割り切って、syscallが中断されるまで送り側がリトライを
かける。確実性が欲しければ受け側でack返すようにしといて、さらに
ハンドラは冪等な操作しかしないようにしとく。など。

もともと、ハンドラとメインのフローが絡むようなケースを確実にサポート
することはシグナルの設計意図には入ってないんじゃないかと思うので、
それを期待するとどうしてもうまくいかないと思います。
もちろん、設計意図の範囲内ではロバストに動くように実装されて
いるはずなので、その範囲を踏み出さないように使うのが吉かと。
(例えばハンドラがメインのフローに直接絡まないBoehm GCのケース
みたいな場合はOK)

--shiro







-- 
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       768 2006-01-05 00:30 [ko1 atdot.net       ] signal + blocking system call           
       769 2006-01-05 04:27 ┗[shiro lava.net      ]                                       
       770 2006-01-05 08:29  ┗[ko1 atdot.net       ]                                     
->     771 2006-01-05 15:43   ┗[shiro lava.net      ]                                   
       772 2006-01-06 18:14    ┗[ko1 atdot.net       ]