【问题标题】:Strange behavior with Thread and FiberThread 和 Fiber 的奇怪行为
【发布时间】:2013-03-06 07:03:11
【问题描述】:

这段代码:

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

【问题讨论】:

    标签: ruby multithreading fibers


    【解决方案1】:

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

    ——Thread class doc

    【讨论】:

      猜你喜欢
      • 2019-06-22
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 2011-10-04
      • 2015-03-16
      • 2017-07-04
      相关资源
      最近更新 更多