2012-05-08 47 views
3

我打算在ruby中使用Thread.Current哈希来在我的Rails应用程序中为每个请求范围共享信息。 (我知道这可能不是最好的设计决策,甚至可能会打破MVC)。 我期待在这里讨论的方法http://coderrr.wordpress.com/2008/04/10/lets-stop-polluting-the-threadcurrent-hash/Rails:请求范围数据共享的Thread.Current哈希

提到这基本上增加了thread_local_accessor方法类,并提供当给定线程超出范围扫地。有谁知道这是否有其他限制或任何我应该知道的陷阱?或者请求更清洁的任何其他替代方法来请求级别哈希值?

回答

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