1

在 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 是否可以工作。

4

1 回答 1

3

不,不能像您的示例一样从多个线程更新类变量。

看看为什么,以及如何使用 Mutex 类来解决这个问题的解释:

http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_threads.html

于 2012-04-07T22:51:37.233 回答