我打算在ruby中使用Thread.Current哈希来在我的Rails应用程序中为每个请求范围共享信息。 (我知道这可能不是最好的设计决定,甚至可能打破MVC)。 我正在研究这里提到的方法http://coderrr.wordpress.com/2008/04/10/lets-stop-polluting-the-threadcurrent-hash/
这基本上为类添加了thread_local_accessor方法,并在给定线程超出范围时提供扫描。有谁知道这是否有任何其他限制或我应该注意的任何问题?或者任何其他请求级别哈希更干净的替代方法?
答案 0 :(得分:0)
您链接的代码不是线程安全的。它使用ruby的Hash类,它不是线程安全的。您可以使用ruby的同步原语之一来保护访问,例如:互斥。
另外,我不相信使用由线程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