けいじゅ@日本ラショナルソフトウェアです. In [ruby-list :06827 ] the message: "[ruby-list:6827] Re: Mutex/ConditionVariable/Queue ", on Feb/27 19:47(JST) Shugo Maeda writes: >前田です。 >|1. extendだけでなく, includeでも使えるようにしてください. > >一応そうするつもりです。 >組み込みクラスの場合、 > >class MyString < String > include MonitorMixin > def self.new(s) ... > end >end > >のようにnewをオーバーライドしないといけないのですが。 きっと, 組み込みクラスがinitializeを呼んでいないからですね? ># append_featuresでnewの定義を変えてしまえばよいのかな...。 いや. このままでよいでしょう. 基本的に組み込みクラスのサブクラスを作る ことは良くないことであるとされていますので. 作る時にはそれなりの覚悟を せよってことで(^^;;; あ, あと, モジュールだけでなく当然モニタクラスも用意されるんですよね? # モジュールがあればすぐですが. >|2. ConditionVariable#wait >| cond.while{条件} or cond.until{条件} >|がいいかな(^^;;; > >Smalltalkみたいですね:-) 昔は, Smalltalkerでしたから(^^;;; いまは, rubyist? # わすれた(^^;;; >wait_while/wait_untilにしようと思います。 >QueueをMonitorMixinで書くとこんな感じになる予定です。 >class Queue (中略) >end それにしてもConditionVariableを使うと本当に簡単になりますねぇ.... # 個人的には今あるQueueを無理に置き換える必要はないと思っていますけど # も. >|# extendableにするという話でしたが, 私除経験からだと結構いろいろ対応し >|# なくてはいけないので(Mutex_m/Sync_m)結構大きくなるかも, すると >|# thread.rbに統合するのは無理があるかも? > >monitor.rbにしようかなと思ってます。 なるほど. >|Queue/SizedQueueの実装がずいぶん簡単になるなと感心してしまいました. 特 >|に, あんなに苦労したSizedQueue#max= があんなに簡単になったのは感動しま >|した. > >実はbroadcastだとpushした順番通りになるとは限らないのですが(^^; なんかへんですね. Mutex#unlockでは逆のことをいっていたのに(^^;;; # 私も並行処理についてもっと勉強しないといけないかなあ... と思い始めま # した. これで, 仕事では大規模分散処理のシステム(のプロトタイプ)をやっ # ているというのだから(^^;;;; __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju / rational.com <<---