2012-12-11 21 views
2

所以,我們試圖用我們的應用程序調試一個問題,我們認爲我們已經把它縮小到線程問題。Ruby的線程函數#join(0)?

我明白基於Ruby的文檔上的線程提供一個整數參數的加入方法指定多久會等待線程剛剛返回nil之前會合。

但是,我不知道,當你在傳遞會發生什麼「0」。

我的一位同事在挖掘了Ruby解釋器的C代碼後,似乎認爲它不是「不要等待,只是立即加入它,如果它不回來就返回零」以及更符合「不要打擾加入,只是在特定時刻返回線程快照」。

任何人都可以點我的一些文檔(或只是平了告訴我)什麼傳遞一個「0」參數join()方法呢?

回答

2

迭戈巴希測試代碼後:

def f() 
    y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }} 
    puts "Waiting" until y.join(0) 
end 

def g() 
    y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }} 
    puts "Waiting" until y.join(0.0000000000001) 
end 

def h() 
    y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }} 
    puts "Waiting" until y.join(0.15) 
end 

fg非常類似。 原因是f只是限制 - 儘可能少地放入數字中。 他們的意思是一樣的。立即檢查線程是否完成。如果不是,則返回零。

在上面的代碼

因此,直到重複計算在第一2箱子但僅評估了幾個在第三種情況下的時間(特別是,每0.15秒)。使用0作爲參數功能完全像其他數 - 檢查,看是否該線程在未來0秒做(現在的),如果它是不返回零。

恐怕你的同事是不正確的。

0

你的同事是正確的。試試這個代碼,例如:

y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }} 
puts "Waiting" until y.join(0) 

與比較:

y = Thread.new { 4.times { sleep 0.1; puts 'tick... ' }} 
puts "Waiting" until y.join(0.15) 

the documentation for join

+0

爲加入的文檔是什麼促使我要問的問題擺在首位。目前尚不清楚在傳遞> 0 int或0 int時是否存在差異(如果有的話)。上面的代碼似乎表明,在經過0作爲參數只是「立即加入」不返回線程(線程對象)正如我的同事的快照建議 –

+0

沒有區別,否則會這麼說明確。 –