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 に答える