4

有没有办法将线程的上下文(基本上是Thread.current哈希)传递给另一个线程。

我正在Thread.new从现有线程做一个,我希望这个新线程能够访问当前(即调用线程的)哈希。

这是在 ruby​​ MRI 1.9.3/Rails 3.2.8 环境中。

4

2 回答 2

1

如果您需要传递光纤本地值,请使用:

Thread.current[:foo] = 'bar'
Thread.new(Thread.current) do |parent_context|
  parent_context.keys.each do |k|
    Thread.current[k] = parent_context[k]
  end

  puts Thread.current[:foo]
end.join

但是对于线程本地值,您应该使用Thread#thread_variable_setThread#thread_variable_get

Thread.current.thread_variable_set(:foo, 'bar')
Thread.new((Thread.current)) do |parent_context|
  puts parent_context.thread_variable_get(:foo)
end.join

查看文档以了解光纤和线程本地值之间的差异

于 2019-06-14T12:42:28.867 回答
0
Thread.new do
  $binding = binding
  msg = "Message from another thread"
end.join

Thread.new($binding){|b| eval("p msg", b)}.join
# => "Message from another thread"
于 2012-11-15T06:27:04.110 回答