我可以使用类变量与线程通信吗?
问题描述:
使用类变量与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