From: "土岐 仁謙" Date: 1999-12-19T22:41:27+09:00 Subject: [ruby-list:19687] Re: Mutex#synchronize 土岐です。 Date: Sun, 19 Dec 1999 17:58:04 +0900 Subject: [ruby-list:19677] Mutex#synchronize Tomoyuki Kosimizu wrote... 越水さん> 下のコードを実行すると: ...(略)... 越水さん> と叱られてしまいます。こうした問題をうまく解決するにはどうしたらいいで 越水さん> しょうか? 手間が増えますが、こういうコードではだめでしょうか? require 'thread' class Foo def initialize @lock = Mutex.new end def _meth_out _meth_in end private: _meth_out def _meth_in p true end private: _meth_in def meth_out @lock.synchronize { _meth_out } end def meth_in @lock.synchronize { _meth_in } end end Date: Sun, 19 Dec 1999 20:24:29 +0900 Subject: [ruby-list:19681] Re: Mutex#synchronize Tomoyuki Kosimizu wrote... 越水さん> Javaの話で恐縮ですが、Javaで書くと次のようになります: 越水さん> class Foo { 越水さん> public static void main(String[] args) { 越水さん> new Foo().meth_out(); 越水さん> } 越水さん> synchronized void meth_out() { 越水さん> meth_in(); 越水さん> } 越水さん> synchronized void meth_in() { 越水さん> System.out.println(true); 越水さん> } 越水さん> } 越水さん> [ruby-list:19677]のコードは、このJavaの書き方を真似たものです。 たぶん Java は同じクラスのメソッドから呼ばれているときは自動的に 判別して、ロックを重ねて掛けないようにしているのではないかと 思います。 # 本当かなあ? Java は使ってみたことがあるという程度なので # ちょっと自信が無いです。 -------------------------------------------------- 土岐 仁謙 神戸大学物理高エネ研 M2 http://www.freedom.ne.jp/toki/