調用Thread.join阻塞當前(主)線程。但是,在主線程退出時,不會調用所有衍生線程中的聯結結果。如何在Ruby中生成持久化子線程而不阻塞主線程?Thread.join阻止主線程
以下是加入的典型用法。
for i in 1..100 do
puts "Creating thread #{i}"
t = Thread.new(i) do |j|
sleep 1
puts "Thread #{j} done"
end
t.join
end
puts "#{Thread.list.size} threads"
這給
Creating thread 1 Thread 1 done Creating thread 2 Thread 2 done ... 1 threads
但是我正在尋找如何得到這個
Creating thread 1 Creating thread 2 ... 101 threads Thread 1 done Thread 2 done ...
的代碼提供同樣的輸出在兩個紅寶石1.8.7和1.9.2
是的,這有效。 我原以爲Ruby會有一種隱式處理方式,而不必跟蹤線程並在最後執行聯合調用。 是的,我不應該在每個線程中使用全局我。基本的東西。感謝您的乾淨修復。我會更新代碼。 – Alkaline 2010-08-14 03:52:40
在Ruby 1.9中,塊參數總是本地的,所以你不需要重命名變量。不過,你會得到一個警告。 (*變量'我'陰影外部變量*或類似的東西。) – 2010-08-14 19:01:03