From: shugo@... (maeda shugo) Date: 1997-07-30T01:21:29+09:00 Subject: [ruby-list:3537] Re: [Q] Thread 前田です。 keiju@bc.mbn.or.jp (石塚圭樹 ) san wrote: |上記のプログラムはクラスを作る側しか利用できないですよね. クラスを使う |側では, そのような対応はできないですよね. ソースを変えれば別ですが, そ |れでは, クラスライブラリの意味(隠蔽効果)がないですしね. 下に書いてらっしゃるようにa_Barをextendすればよいのではないでしょうか? |> class Foo |> include Synchronizable |> |> # 同時にアクセスされたくないメソッド |> def synchronized_method |> synchronize { |> ... |> } |> end |> end | |排他制御は資源(オブジェクト)単位で行うものであって, メソッドレベルで行 |うものでないと思うんですが... もし, a_Barに対して排他制御を行いたけれ |ば, あ、メソッド全体をsynchronizeする必要はないですね。 Hash#rehashみたいなのを想定してたんですが...。 |class Foo | def initialize | a_Bar = ... | a_Bar_mutex = Mutex.new | # or a_Bar.exend Mutex_m | ... | def method | ... | # a_Barを使うトランザクションレベルオペレーション | a_Bar_mutex.syncronize do | # or a_Bar.synchronize do | ... | end | ... | end |end | a_Bar_mutex = Mutex.new だとFooについての排他制御になりますよね? 同じa_Barを異なるFooインスタンスで参照するとまずくないですか? |# 私は, 元OODB屋さんなのでこの辺は細かいのであった(^^;;; 僕はデータベースと聞くと図書館を思い浮べてしまいます(^^; -- 前田 修吾