2016-06-08 21 views
0

比較不知名的數據插槽和ThreadLocal的...爲什麼在ThreadLocal上使用數據插槽?

MSDN只是說

在.NET Framework 4,你可以使用 System.Threading.ThreadLocal類來創建線程本地對象 那當對象第一次被消費時,它會被懶惰地初始化。有關 的更多信息,請參閱延遲初始化。

如果我沒有懶惰的init,ThreadLocal看起來是最好的選擇......它使用起來更簡單,並且不需要強制轉換。當選擇另一個時,是否還有其他的事情需要考慮?

+3

在Windows上,使用Thread Local Dataslots API實現'ThreadLocal '。除非你有一些令人信服的理由在Windows API級別工作,否則最好使用'ThreadLocal '。 –

回答

2

正如我在評論中所說,ThreadLocal<T>是使用Thread Local Dataslots API實現的。您可以通過查看ThreadLocal source code來確認。除非你有一些令人信服的理由在Windows API級別工作,否則最好使用ThreadLocal<T>

選擇ThreadLocal<T>的一個很好的理由是,它確保爲每個線程初始化值。 ThreadStatic不會這樣做,並且您的線程本地數據插槽API的接口也必須專門爲它編寫代碼。請參閱https://stackoverflow.com/a/18337158/56778瞭解更多信息。

使用ThreadLocal<T>進行延遲初始化。你會爲自己節省很多痛苦。

相關問題