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