【问题标题】:Can I use class variables to communicate with threads?我可以使用类变量与线程通信吗?
【发布时间】:2012-04-08 06:51:37
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby nginx thread-safety passenger


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-23
      • 2021-08-31
      • 2011-04-02
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多