我們正在測試我們的嵌入式ruby的線程協作。我們有一個C Ruby擴展implementented以下方法爲什麼sleep語句爲我們的嵌入式ruby產生這個結果?
1. longRunningMethod()
2. shortRunningMethod().
下面是檢查線程合作
//文件 test.rb
require 'mymodule'
$a = 0;
obj = MyModule::MyClass.new
t1 = Thread.new{$a = obj.veryLongRunningOperation(); puts "doneLong"}
sleep 1
$a = obj.shortOperation()
puts "doneShort"
t1.join
我們已經確保了一個代碼longRunningMethod使用嵌套循環執行需要超過1秒(5秒)的執行時間 根據我們的理解,首先應完成shortRunningMethod,然後再執行longRunningMethod。
但是我們只在沒有任何睡眠命令時才觀察到這一點。 但是當我們介紹「睡眠1」的聲明。 longRunningMethod首先執行然後執行shortRunningMethod
任何人都會給我們關於爲什麼sleep語句產生這個結果的指針?
[我們正在使用紅寶石1.8.6]在此先感謝。
非常感謝您的答覆。你能告訴我什麼是原子方法,並且c有一個原子方法(我發現目標c有原子方法)? – Prajkata
原子的一旦開始執行,Ruby無法停止或暫停它。它需要在控制權返回到Ruby之前全部執行。 – Mchl
我有一個問題,當我們刪除睡眠函數調用時,爲什麼我們得到預期的結果?(shortRunningMethod先完成然後再運行longRunningMethod。)。 – Prajkata