原です。

> けいじゅ@SHLジャパンです. 
> 
> Mutexのモジュール版(Mutex_m)を公開します. モジュールはmutex_m.rbのまま
> でもいいですし, thread.rbに入れて下さってもかまいません.

うーん、なるほど、こうやるんですね。


> このモジュールは, クラス変数Lockedを使って待ちに入っているスレッドを保
> 持しています. Lockedはハッシュでキーはこのモジュールをエクステンドした
> オブジェクトのidとなっています. 

あ、そうか定数はこんな風に使えるんでした。


> 質問:
> [1] lockについて

> [2] Thread.critical = TRUE
> としなくては行けなくなるのはどういう時なのでしょう? つまり, スレッドの
> スイッチの粒度はどのくらいなのでしょう? 
> 
> それとかかわるのですが, 共有オブジェクトにアクセスする時には必ず
> Thread.critical = TRUEとしなくてはいけない? それとも書き込む時だけでしょ
> うか?

このあたり、ずいぶん話題に出ました。[Q] Use of Thread and Mutex と
かいうタイトルで、今月に入ってからです。スレッドの中で

foo[bar] = TRUE; foo[bar] # => FALSE

となったりするという話でしたが、

$mt.synchronize{foo[bar] = TRUE}; foo[bar] #=> FALSE

ということもありました。Thread の内部仕様が変更になってからは
後者は起こらなくなったようです。

(起こった事がある様な気もするのですが、再現できなくて。

$mt.synchronize{ foo[bar] = TRUE; foo[bar] #=> FALSE }

さえ起こった様な気がするんですが、気のせいだったかも。^^;)