[#1371] Re: [ruby-list:6104] Re: パースエラー等の嵐を Dos窓で受けるには ...? — Masao Kanemitsu <masao-k@...>
<9801290711.AA10183@pbsun10.pb.ascii.co.jp> の、
[#1381] bound method — shugo@... (Shugo Maeda)
前田です。
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
前田です。
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
[#1386] downcase — Shin-ichiro HARA <sinara@...>
原です。
原です。
[#1410] GD — Masao Kanemitsu <masao-k@...>
まつもと ゆきひろです
わたなべです.
<199802100623.PAA03533@eban.ase.ptg.sony.co.jp> の、
わたなべです.
<199802100733.QAA04028@eban.ase.ptg.sony.co.jp> の、
わたなべです.
<199802100757.QAA04212@eban.ase.ptg.sony.co.jp> の、
わたなべです.
<199802100952.SAA04346@eban.ase.ptg.sony.co.jp> の、
わたなべです.
<199802120449.NAA00398@eban.ase.ptg.sony.co.jp> の、
わたなべです.
<199802120600.PAA00591@eban.ase.ptg.sony.co.jp> の、
わたなべです.
<199802120717.QAA00774@eban.ase.ptg.sony.co.jp> の、
> Windows 95では、GDだけロードエラーに。(3台で確認)
[#1412] GD — Masao Kanemitsu <masao-k@...>
まつもと ゆきひろです
<199802100636.PAA16869@picachu.netlab.co.jp> の、
[#1468] tcltk library — Masao Kanemitsu <masao-k@...>
[#1481] tkmandel — Masao Kanemitsu <masao-k@...>
[#1483] 拡張モジュール on Windows — Masao Kanemitsu <masao-k@...>
わたなべです.
[#1501] Re: 拡張モジュールon Windows — Masao Kanemitsu <masao-k@...>
> <199802180824.RAA20375@eban.ase.ptg.sony.co.jp> の、
[#1505] final.rb:35: [BUG] bug in variable assignment — shugo@... (Shugo Maeda)
前田です。
[#1506] [BUG] instance_of? — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
[#1520] SizedQueue and some question — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
[#1528] Mutex#unlock — shugo@... (Shugo Maeda)
前田です。
[ruby-dev:1543] Re: SizedQueue and some question
けいじゅ@日本ラショナルソフトウェアです.
In [ruby-dev :01531 ] the message: "[ruby-dev:1531] Re: SizedQueue and
some question ", on Feb/25 12:32(JST) Yukihiro Matsumoto writes:
>まつもと ゆきひろです
>|っていみですよね? そうすると, t.run したじゅんばんに @que.pushすること
>|になるんです?
>
>Thread.criticalでない場合はrunするとそのままそのスレッドに実
>行権が移りますから,t.runした順番になる可能性が高いと思いま
>すけど.
? そうすると, Thread.critical = TRUE の時はどうなるの? その変はなんか
同じじゃないんですか?
と思っていたら下に答がありますね...
# いままで, わかっていなくて作っていたのかな(^^;;;;
>|とするってのはどうですか? そうすると, 走り出したスレッドが他のスレッド
>|をブロックするので順序が保証されるんじゃないですかね?
>Thread.criticalな状態でrunされた場合は,スレッドの状態が
>runnableになるだけで,次に実行権が渡る順番は不定です.ですか
>ら,順序の保証にはならないと思います.そもそも走り出す順番が
>不定なんですから.
うーん. そうだったんですね. 全然知らなかった(^^;;;;;;;;;;;;
# Thread.criticalな状態でも, t.runするとそれが解除されると信じていまし
# た(^^;;;
そうすると. 例えば
SizedQueue::
def pop(*args)
Thread.critical = TRUE
if @que.length < @max
t = @queue_wait.shift
#1-> t.run if t
end
pop = super
pop
end
Queue::
def pop non_block=FALSE
item = nil
until item
Thread.critical = TRUE
if @que.length == 0
if non_block
$2-> Thread.critical = FALSE
raise ThreadError, "queue empty"
end
@waiting.push Thread.current
#3-> Thread.stop
else
item = @que.shift
end
end
#4->Thread.critical = FALSE
item
end
なんかでは,
#1では実際にスレッドは走りはじめないんですね? んで, #3でカレントのスレッ
ドが停止した時か#2, #4で走りはじめることになる?
>| def push(obj)
>| Thread.critical = TRUE
>| while @que.length >= @max
>| @queue_wait.push Thread.current
>| Thread.stop
>|--> Thread.critical = TRUE
>| end
>| super
>| end
>これはこれで別の意味はあると思うんですが.
そうですね. 最初にするなら, ここでもしないと...
今回の理解を元に書き換えました. 以下のはどうです?
SizedQueue::
def max=(max)
Thread.critical = TRUE
if @max >= max
@max = max
Thread.critical = FALSE
else
diff = max - @max
@max = max
Thread.critical = FALSE
diff.times do
t = @queue_wait.shift
t.run if t
end
end
max
end
それなりに利用価値があるともうので, できればSizedQueueに採用して下さい.
__
................................石塚 圭樹@日本ラショナルソフトェア...
----------------------------------->> e-mail: keiju@rational.com <<---