我实现异步线程管理器,我想传递对线程的引用,它应该保存他的工作结果。然后当所有线程完成后,我将处理所有结果。
我需要知道如何使用'参考'。
假设我有变量result
(或hash[:result1]
),我想把它传递给线程,如
def test_func
return 777;
end
def thread_start(result)
Thread.new do
result = test_func;
end
end
我希望得到以下结果
result = 555
thread_start(result);
#thread_wait_logic_there
result == 777; #=> true
hash = {:res1 => 555};
thread_start(hash[:res1])
#thread_wait_logic_there
hash[:res1]==777 #=> true
我应该在代码中使用什么才能使其正常工作?
Ruby版本是1.9.3
答案 0 :(得分:1)
你可以将entrire hash传递给function:
def test_func
return 777;
end
def thread_start(hash, key)
Thread.new do
hash[key] = test_func;
end
end
然后这将起作用:
hash = {:res1 => 555};
thread_start(hash, :res1)
hash[:res1]==777 #=> true
此外,如果您想确保在计算完成后得到结果,您必须等待线程,如下所示:
hash = {:res1 => 555};
thread_start(hash, :res1).join
hash[:res1]==777 #=> true
编辑:添加密钥,加入