2016-06-08 51 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>进行延迟初始化。你会为自己节省很多痛苦。