けいじゅ@日本ラショナルソフトウェアです.

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 <<---