0

我实现了异步线程管理器,我想传递对线程的引用,它应该保存他的工作结果。然后当所有线程完成时,我将处理所有结果。

我需要知道如何使用“参考”。

假设我有变量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

4

1 回答 1

1

您可以将整个哈希传递给函数:

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

编辑:添加密钥,加入

于 2013-02-28T10:59:43.560 回答