3

我计划在 ruby​​ 中使用 Thread.Current 哈希在我的 Rails 应用程序中共享每个请求范围的信息。(我知道这可能不是最好的设计决策,甚至可能会破坏 MVC)。我正在查看这里提到的方法http://coderrr.wordpress.com/2008/04/10/lets-stop-polluting-the-threadcurrent-hash/

这基本上为类添加了一个 thread_local_accessor 方法,并在给定线程超出范围时提供扫描。有谁知道这是否有任何其他限制或我应该注意的任何问题?或者任何其他更清洁的请求级别哈希的替代方案?

4

1 回答 1

0

您链接到的代码不是线程安全的。它使用 ruby​​ 的 Hash 类,它不是线程安全的。您可以使用 ruby​​ 的同步原语之一来保护访问,例如 Mutex。

此外,我不相信使用由线程 id 索引的全局数据结构比仅使用 Thread.current 更好。

如果您担心密钥冲突,为什么不选择唯一密钥,例如 GUID。基于您提供的链接中的示例:

class ThreadedLibrary
  @@LIBRARY_ID = 'D0052660-60E6-4624-B08E-ECA9200B2949'
  Thread.current[@@LIBRARY_ID] = {}

  def self.some_setting= val
    Thread.current[@@LIBRARY_ID][:some_setting] = val
  end

  def self.some_setting
    Thread.current[@@LIBRARY_ID][:some_setting] ||= :default
  end
end
于 2013-11-13T00:57:15.727 回答