线程和光纤的奇怪行为

时间:2013-03-06 07:03:11

标签: ruby multithreading fibers

此代码:

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?怎么解释?

1 个答案:

答案 0 :(得分:1)

  

Thread#[]Thread#[]= 不是线程本地的,而是本地的 。这个   Ruby 1.8中不存在混淆,因为光纤只有可用   从Ruby 1.9开始。 Ruby 1.9选择方法表现为本地光纤   为动态范围保存以下习语。

- Thread class doc