At 23:22 7/28/2001 +0900, you wrote: >I'm working on getting Rubicon to run to completion under Windows, and >I've come across a possible problem with threading. > > threads = [] > 3.times do |i| > threads << Thread.new(i) do |tno| > 1000000.times do |i| > puts("#{tno}: #{i}") if i%100000 == 0 > end > end > end > > puts "Waiting" > threads.each {|t| t.join} > puts "Done" > > >Under Linux, the above produces: > > 0: 0 > 1: 0 > 2: 0 > Waiting > 0: 100000 > 1: 100000 > 2: 100000 > 0: 200000 > 1: 200000 > 2: 200000 > 0: 300000 > 1: 300000 > 2: 300000 > ..... > 0: 900000 > 1: 900000 > 2: 900000 > Done > >On my W2K box, with a freshly compiled 1.7.1/Cygwin, I get > > 0: 0 > 0: 100000 > 0: 200000 > 0: 300000 > 0: 400000 > 0: 500000 > 0: 600000 > 0: 700000 > 0: 800000 > 0: 900000 > 1: 0 > 1: 100000 > 1: 200000 > 1: 300000 > 1: 400000 > 1: 500000 > 1: 600000 > 1: 700000 > 1: 800000 > 1: 900000 > 2: 0 > 2: 100000 > 2: 200000 > 2: 300000 > 2: 400000 > 2: 500000 > 2: 600000 > 2: 700000 > 2: 800000 > 2: 900000 > Waiting > Done > >That is, all threads run to completion: there's no preemption. The >same thing happens with the 1.6.4 from the Installshield distribution. > >Dave I ran your code under Win2k no Cygwin results look l 0: 0 1: 0 2: 0 Waiting 0: 100000 1: 100000 2: 100000 1: 200000 0: 200000 2: 200000 1: 300000 0: 300000 2: 300000 1: 400000 0: 400000 2: 400000 1: 500000 0: 500000 2: 500000 0: 600000 1: 600000 2: 600000 0: 700000 1: 700000 2: 700000 1: 800000 0: 800000 2: 800000 1: 900000 0: 900000 2: 900000 Done