2010年5月6日20:20 Yusuke ENDOH <mame / tsg.ne.jp>:

> Thread.raise を受け付けたらまずい期間は mutex をロックしておけ、という
> ことで解決できないでしょうか。

では、次に open がブロックする場合を考えましょう。
たとえば、fifo (named pipe) を open する場合が考えられます。

そうすると、

>    m.synchronize do
>      f = open(filename)
>    end

という部分の、sycnchronize の内部でブロックすることになります。
こうなると open を外部から中断できなくなります。

ブロックしてしまったスレッドを中断したいというのはありがちな話で、
それができないのはよろしくないんじゃないでしょうか。

> いえ、そういう心配ではないです。
> Ctrl+C を連打した場合、ensure の実行開始直後でもう一回 Interrupt が
> 発生してしまうと、ensure 節の中身が実行されない可能性があるのでは
> ないかという心配です。

あぁ、Ruby レベルの話でしたか。C レベルの話と勘違いしました。

それならたしかに同様だと思います。
-- 
[田中 哲][たなか あきら][Tanaka Akira]