ruby - 这个 ruby​​ 代码线程安全吗?

标签 ruby multithreading thread-safety instance-variables

这段代码是线程安全的吗?它似乎应该是这样,因为永远不会从多个线程分配@myvar(假设 block 在 < 1 秒内完成)。

但是我是否需要担心第二个 block 在写入时试图读取 @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

最佳答案

您的代码正在使用 EventMachine ,它仅将线程用于 IO,并在单个线程中完成所有代码处理。 EventMachine 专为您的目的而设计,因此所有变量访问在设计上都是线程安全的,您的代码中不需要额外的检查。

不仅赋值是安全的(即使它是原子的)而且数据结构的操作也是安全的并且不受竞争条件的影响。

关于ruby - 这个 ruby​​ 代码线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2926402/

相关文章:

ruby - sudo gem --proxy <PROXY> 或 bash 函数的别名?

ruby - Ruby 中的缓冲多部分表单帖子

java - 返回 Java 数组与集合

c++ - 获取/释放内存顺序

ruby-on-rails - Heroku 找不到 SecureRandom

ruby - `-' :String 的未定义方法 "100"

multithreading - 如果一个 goroutine 已完成,控制 goroutine 关闭的规范方法是什么?

python - 为什么我使用pystray时无法关闭?

scala - 处理不可变类中的超时

c++ - 使用 shared_ptr 的内部指针的操作是原子的吗?