From: Tomoyuki Chikanaga Date: 2012-11-09T10:08:01+09:00 Subject: [ruby-dev:46454] Re: トラップハンドラで許されない操作はなにか 近永と申します。 > 1.現状のインプリが正しい。トラップハンドラはグローバル変数に書き込んですぐ抜けるべし > 2.mutexはトラップハンドラで使えないが、IOは使えるべき。 > 3.mutexもIOもトラップハンドラから使えるべき なんでも使いたいユーザー目線としては 3 がいいのでしょうが、わたしの感覚では 2 だと思います。シグナルハンドラ内で mutex 使えないというのは納得感がありますが IO できないというのはあまり自明でないというのと、次に書くように実際の用途があると思います。 子プロセスの終了を SIGCHLD で検出するために、トラップハンドラ内でロックが使えないので pipe を使ってトラップハンドラで書込み、監視するスレッドで IO.select で待って読むというのをやったことがあります。ロックも使えないしIOもできないとなると、変数に代入して監視するほうは polling で検出するしかなくなり、その場合シグナルの喪失がありえると思います。 > ・そもそもトラップからthrowして制御を戻すのは合法か? 感覚的なことしか言えなくて申し訳ないのですが、これはさすがに無しじゃないでしょうか。 以上です。