まつもと ゆきひろです

In message "[ruby-dev:1534] Re: Mutex#unlock"
    on 98/02/25, Shugo Maeda <shugo / po.aianet.ne.jp> 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)