本文簡要介紹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]。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。