Ben*_* K. 2 ruby multithreading instance-variables thread-safety
这段代码是否安全?它似乎应该是,因为永远不会从多个线程分配@myvar(假设块在<1s内完成).
但是,我是否需要担心第二个块正在尝试读取@myvar的情况?
require 'rubygems'
require 'eventmachine'
@myvar = Time.now.to_i
EventMachine.run do
EventMachine.add_periodic_timer(1) do
EventMachine.defer do
@myvar = Time.now.to_i # some calculation and reassign
end
end
EventMachine.add_periodic_timer(0.5) do
puts @myvar
end
end
Run Code Online (Sandbox Code Playgroud)
Tel*_*Sam 11
您的代码使用EventMachine,它仅为IO使用线程,并在单个线程中执行所有代码处理.EventMachine完全是出于您的目的而设计的,因此所有变量访问都是设计线程安全的,代码中不需要额外的检查.
赋值不仅安全(即使它是原子的),但数据结构的操作也是安全的,不受竞争条件的影响.
| 归档时间: |
|
| 查看次数: |
1067 次 |
| 最近记录: |