原です。 > けいじゅ@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 } さえ起こった様な気がするんですが、気のせいだったかも。^^;)