私はルビーに取り掛かっており、スレッドを完全に理解していない状態でしばらくの間スレッドを使用しています。配列にスレッドを追加するときに、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」のようなことをしてもうまくいくことに気付くことがあります。
前もって感謝します。