From: m_seki@... Date: 2000-10-23T11:44:38+09:00 Subject: [ruby-list:25576] Re: [ruby-talk:5747] Q on Queue 咳です。 英語で書けないのです。 Subject: [ruby-talk:5747] Q on Queue feldt> I just started looking at Ruby's thread support so I might be missing feldt> something vital but: feldt> feldt> * In Queue#push: feldt> feldt> 1 def push(obj) feldt> 2 Thread.critical = true feldt> 3 @que.push obj feldt> 4 begin feldt> 5 t = @waiting.shift feldt> 6 t.wakeup if t feldt> 7 rescue ThreadError feldt> 8 retry feldt> 9 ensure feldt> 10 Thread.critical = false feldt> 11 end feldt> 12 t.run if t feldt> 13 end feldt> feldt> does anything prevent the scheduler from scheduling a thread t2 that are feldt> waiting after t1 (that have been waked up and is about to be run) so that feldt> it gets the next object in the queue before t1? feldt> feldt> That is: feldt> @waiting = [t1,t2] feldt> push o1 wakes up t1 feldt> interrupted at line 11 feldt> push o2 wakes up t2 feldt> t2 pops o1 feldt> t1 pops o2 Queueなのですが、一つのスレッドで q.pop # --> o2 q.pop # --> o1 の順に取り出せたら問題かも知れないけど、 二つのスレッドがどちらが先に取り出せるかは不定だと思うのですが、 どうでしょうか ? つまり、上は問題ないと思うのですが…