From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-02-24T17:34:51+09:00 Subject: [ruby-dev:1522] Re: SizedQueue and some question けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :01521 ] the message: "[ruby-dev:1521] Re: SizedQueue and some question ", on Feb/24 17:08(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >スレッド周りは私も分かんないことが多いんです. (^^;;; >|SizedQueueで途中で max size が帰られると良いと思ったんですが... > >んーと,石塚さんの定義ではまずいように思います.そもそもmax >を大きくする方はともかく,maxを小さくする時の挙動って定義で >きないような気が…. 小さくする時は, @queのサイズがmaxより小さくなるまでスレッドには待って もらえば良いんじゃないですかね? 一時的には@queサイズがmaxよりも大きく なってしまいますが, しょうがないってことで... 以下の定義はどうでしょう? 待っているスレッドは走り出せば必ず@queにpush しますので... def max=(max) if @max <= max @max = max else Thread.critical = TRUE diff = max - @max @max = max diff.times do t = @queue_wait.shift t.run if t end end end >|一応, ``#-->Thread.critical = TRUE'' があった方がよかないですか? > >なくても良いような気がするんですけどねえ.あっても邪魔になら >ないんで追加しておきますか. SizedQueue#pushは, @que.size == @max - 1の時に, 同時に複数スレッドから pushしたときとかは, 2つpushできてしまいますので... SizeQueue#popは動き 出すべきスレッドが動かなくなる可能性がありますものね... 対したことではないといえば対したことでもないんですが... >| back, Thread.critical = Thread.critical, TRUE >| Thread.critical = back >| >|の組合せの方が良くないですか? それとも, そういう必要はないんですかね? > >Thread.criticalはネストすることはないはず(というかそうするべ >き)なので,現状で良いと思います. なるほど. 了解しました. そうすると, SizedQueueのようにサブクラスを作っ たりする時は気をつけないといけないですね. __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---