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 ]