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()

在我的主应用程序中,我有线程安全!配置选项集。我知道线程安全!启用后,每个控制器都存在于每个请求的自己的线程中。

但是,这个模块是线程安全的吗?我怀疑所有请求只有一个该模块的副本,因此它本质上不是线程安全的,并且需要使用 Mutex 之类的手动同步。具体来说,我有在 ActiveResource 类之外设置 HTTP 请求标头的代码WebResource。这会导致线程问题吗?

4

1 回答 1

3

这将取决于您在此方法中执行的操作是否是线程安全的。如果它不接触类变量,那么它是线程安全的。

如果它在类级别存储或设置信息并假设在再次使用该信息之前没有其他方法会接触该信息,那么它不是线程安全的。

于 2012-09-18T21:43:29.827 回答