2

这段代码:

Fiber.new do 
  Thread.current['a'] = 5

  p Thread.current.object_id
  p Thread.current['a']

  Fiber.new do 
    p Thread.current.object_id
    p Thread.current['a']
  end.resume

  p Thread.current.object_id
  p Thread.current['a']
end.resume

显示以下结果:

3442840
5

3442840
nil

3442840
5

为什么current['a']返回nil嵌套纤维?怎么解释?

4

1 回答 1

1

Thread#[]并且Thread#[]=不是thread-local 而是 fiber-local。这种混淆在 Ruby 1.8 中不存在,因为纤维仅在 Ruby 1.9 之后才可用。Ruby 1.9 选择方法表现为 Fiber-local 以保存以下用于动态范围的惯用语。

— <a href="http://ruby-doc.org/core-2.0/Thread.html#method-i-5B-5D" rel="nofollow">线程类文档

于 2013-03-06T09:09:11.743 回答