From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-07-30T04:06:25+09:00 Subject: [ruby-list:3538] Re: [Q] Thread けいじゅ@今はフリー(^^;;;です. 何か出した例が悪かったようですいません(__;;; In [ruby-list :03537 ] the message: "[ruby-list:3537] Re: [Q] Thread ", on Jul/30 01:21(JST) shugo@po.aianet.ne.jp (maeda shugo) writes: >|上記のプログラムはクラスを作る側しか利用できないですよね. クラスを使う >|側では, そのような対応はできないですよね. ソースを変えれば別ですが, そ >|れでは, クラスライブラリの意味(隠蔽効果)がないですしね. > >下に書いてらっしゃるようにa_Barをextendすればよいのではないでしょうか? それをできるのは, クラスFooの作者だけですよね. ただ, クラスFooを使う側 には手のとどかないところにあるといいたかったのです(a_Barの参照するオブ ジェクトは, Fooの外からアクセスできないオブジェクトであるとしていまし た). >|排他制御は資源(オブジェクト)単位で行うものであって, メソッドレベルで行 >|うものでないと思うんですが... もし, 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インスタンスで参照するとまずくないですか? 確かに, a_Bar_mutexも共有するようにする必要がありますね. # ただし, 上記のプログラムは, プログラムが最初の前提を満たしていないん # ですよね. 異なるFooインスタンスで同じa_Barを共有することができる例 # になっていない... >|# 私は, 元OODB屋さんなのでこの辺は細かいのであった(^^;;; >僕はデータベースと聞くと図書館を思い浮べてしまいます(^^; うーん. 似ているというか似ていないというか... __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju@bc.mbn.or.jp <<---