2012-05-08 43 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