0

私はルビーに取り掛かっており、スレッドを完全に理解していない状態でしばらくの間スレッドを使用しています。配列にスレッドを追加するときに、sleep() コマンドを最初のコマンドとして追加すると、ほとんどが必要な結合を行うまでスレッドが実行されないことに気付きました。だから私は2つの質問があります。

1.そんなことあるの?

2.私がやっている方法以外に、それを行うためのより良い方法はありますか. これは、私が話していることを示す必要があるサンプルコードです。

job = Array.new
10.times do |n|
    job << Thread.new do
        sleep 0.001
        puts "done #{n}"
    end 
end
#job.each do |t|
    #t.join
#end

puts "End of script"

出力は

End of script

コメント出力を削除すると、

done 1  
done 0  
done 7  
done 6  
done 5  
done 4  
done 3  
done 2  
done 9  
done 8  
End of script

だから私は今これを使っていますが、なぜそれができるのか分かりません。時々、スリープの代わりに「echo hi」のようなことをしてもうまくいくことに気付くことがあります。

前もって感謝します。

4

1 に答える 1