Ruby on rails 我可以使用类变量与线程通信吗?

Ruby on rails 我可以使用类变量与线程通信吗?,ruby-on-rails,ruby,nginx,thread-safety,passenger,Ruby On Rails,Ruby,Nginx,Thread Safety,Passenger,使用类变量与Rails中的线程通信是否是0K 与使用队列相比,有什么优点或缺点 我不确定这是否适用于任何环境,它适用于我的环境:Ruby Enterprise+Passenger+nginx+Rails 3 下面是一个例子: # rails runner "ThreadJob.new.run" class ThreadJob @@counter = 0 def run producer = Thread.new do 1.upto 10 do sl

使用类变量与Rails中的线程通信是否是0K

与使用队列相比,有什么优点或缺点

我不确定这是否适用于任何环境,它适用于我的环境:Ruby Enterprise+Passenger+nginx+Rails 3

下面是一个例子:

# rails runner "ThreadJob.new.run"
class ThreadJob

  @@counter = 0

  def run
    producer = Thread.new do
      1.upto 10 do
        sleep 1
        @@counter+= 1
        puts "Producer: #{@@counter}"
      end
    end

    consumer = Thread.new do
      sleep 0.5
      1.upto 10 do
        sleep 1
        @@counter-= 1
        puts "Consumer: #{@@counter}"
      end
    end

    producer.join
    consumer.join

    puts @@counter # result should be 0
  end
end

如果我在另一个进程中修改@@counter,我想知道这是否可行。

不,像您的示例那样从多个线程更新类变量是不合适的

请看一看为什么以及如何使用互斥类解决此问题的说明: