本文简要介绍ruby语言中 Thread.thr[sym]
的用法。
用法
thr[sym] → obj or nil
属性引用 - 使用符号或字符串名称返回 fiber-local 变量的值(如果没有明确在 Fiber
内,则返回当前线程的根纤程)。如果指定的变量不存在,则返回 nil
。
[
Thread.new { Thread.current["name"] = "A" },
Thread.new { Thread.current[:name] = "B" },
Thread.new { Thread.current["name"] = "C" }
].each do |th|
th.join
puts "#{th.inspect}: #{th[:name]}"
end
这将产生:
#<Thread:0x00000002a54220 dead>: A
#<Thread:0x00000002a541a8 dead>: B
#<Thread:0x00000002a54130 dead>: C
Thread#[]
和 Thread#[]=
不是线程本地的,而是 fiber-local。这种混淆在 Ruby 1.8 中不存在,因为纤维仅在 Ruby 1.9 之后才可用。 Ruby 1.9 选择方法行为 fiber-local 来保存动态范围的以下惯用语。
def meth(newvalue)
begin
oldvalue = Thread.current[:name]
Thread.current[:name] = newvalue
yield
ensure
Thread.current[:name] = oldvalue
end
end
如果方法是线程本地的并且给定的块切换光纤,则该习惯用法可能无法用作动态范围。
f = Fiber.new {
meth(1) {
Fiber.yield
}
}
meth(2) {
f.resume
}
f.resume
p Thread.current[:name]
#=> nil if fiber-local
#=> 2 if thread-local (The value 2 is leaked to outside of meth method.)
对于线程局部变量,请参见 thread_variable_get
和 thread_variable_set
。
相关用法
- Ruby Thread.thread_variables用法及代码示例
- Ruby Thread.thread_variable?用法及代码示例
- Ruby Thread.thread_variable_get用法及代码示例
- Ruby Thread.kill用法及代码示例
- Ruby Thread.pending_interrupt?用法及代码示例
- Ruby Thread.report_on_exception用法及代码示例
- Ruby Thread.group用法及代码示例
- Ruby Thread.list用法及代码示例
- Ruby Thread.ignore_deadlock =用法及代码示例
- Ruby Thread.stop用法及代码示例
- Ruby Thread.abort_on_exception=用法及代码示例
- Ruby Thread.stop?用法及代码示例
- Ruby Thread.new用法及代码示例
- Ruby Thread.report_on_exception=用法及代码示例
- Ruby Thread.value用法及代码示例
- Ruby Thread.run用法及代码示例
- Ruby Thread.status用法及代码示例
- Ruby Thread.priority=用法及代码示例
- Ruby Thread.key?用法及代码示例
- Ruby Thread.keys用法及代码示例
- Ruby Thread.alive?用法及代码示例
- Ruby Thread.priority用法及代码示例
- Ruby Thread.handle_interrupt用法及代码示例
- Ruby Thread.raise用法及代码示例
- Ruby Thread.current用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Thread.thr[sym]。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。