3

私の Rails 3.1 アプリはエンジンを使用しており、このエンジンへのアクセスがスレッドセーフかどうかを知りたいです。

エンジンに /lib/mymodule.rb があり、次のようになります。

module MyModule
  def self.my_method()
    begin
       data = WebResource.find(:all) # Where WebResource < ActiveResource::Base
    rescue
       data = nil
    end

    return data
  end
end

次に、ビュー/コントローラーで、このメソッドを次のように呼び出します。

MyModule::WebResource.headers[:some_id] = cookies[:some_id]
MyModule::my_method()

私のメインアプリには、スレッドセーフがあります! 構成オプション セット。私はスレッドセーフでそれを知っています! 有効にすると、各コントローラーはリクエストごとに独自のスレッドに存在します。

しかし、このモジュールはスレッドセーフですか? すべての要求に対してこのモジュールのコピーが 1 つしかないため、本質的にスレッドセーフではなく、Mutex などを使用して手動で同期する必要があると思われます。具体的には、ActiveResource クラスの外部でHTTP 要求のヘッダーを設定するコードがありますWebResource。これにより、スレッドの問題が発生する可能性がありますか?

4

1 に答える 1

3

スレッドセーフかどうかは、このメソッド内で何をするかによって異なります。クラス変数に触れない場合、スレッドセーフです。

クラス レベルで情報を格納または設定し、その情報を再度使用する前に他のメソッドがその情報にアクセスしないと想定している場合、スレッド セーフではありません。

于 2012-09-18T21:43:29.827 に答える