From: matz@... (Yukihiro Matsumoto) Date: 1998-02-27T10:49:47+09:00 Subject: [ruby-dev:1547] mutex_m.rb (Re: Mutex#unlock) まつもと ゆきひろです In message "[ruby-dev:1534] Re: Mutex#unlock" on 98/02/25, Shugo Maeda writes: | |前田です。 |今Javaのスレッド関係をちょっと勉強しているのですが、参考書にロックの |スターベーションを回避するために、獲得要求をキューイングして順番にロ |ックを取得させる例が出ていましたので、キューの先頭だけ起こすだけで問 |題ない(というかその方がよい?)のかもしれません。 |# ただJavaだとnotifyで誰が起きるかわからないので、その例では全部の |# スレッドを起こして、先頭のスレッド以外また寝させる、という方法を |# 取っていました。 | |# スレッド関係って問題を見つけるのが大変ですね。 |P.S. 1.1b8でmutex_m.rbが動かなくなってます:-( | |mutex_m.rb:122:in `extend_object': Uninitialized constant Finalizer (NameError) なんで Finalizer が呼ばれないのかわかりません(私のところでは そのエラーは起きませんでした). それも謎ですが,それはともかくmutex_mにはsync_mと同様に1.1で finalizerが起動されるようになってお蔭で顕在化したバグがあり ます.mu_delete_Lockedというメソッドなんて定義されてないし, なんか引数の数が違うとかいって怒られるし(こっちはfinalize.rb のバグ). 作者の石塚さんによる対応を待ちましょう. まつもと ゆきひろ /:|) finalize.rbへのパッチ(暫定版) diff -u -1 -r1.1.1.2.2.4 finalize.rb --- finalize.rb 1998/02/06 10:03:24 1.1.1.2.2.4 +++ finalize.rb 1998/02/27 01:48:52 @@ -172,3 +172,3 @@ if assocs = Dependency.delete(id) - for dependant, method, *opt in assocs + for dependant, method, opt in assocs dependant.send(method, id, *opt)