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

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

问题描述:

使用类变量与Rails中的线程进行通信是否为0K?我可以使用类变量与线程通信吗?

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

我不知道,如果这个工程在任何环境下,它的工作在我的:Ruby企业+乘客+的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,这可以工作。

不,从您的示例中更新多个线程的类变量是不行的。

看看的原因,以及如何解决这个使用Mutex类的解释:

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