为什么在ThreadLocal上使用数据槽?

时间:2016-06-08 15:49:36

标签: c# multithreading thread-local-storage

比较未命名的数据广告位和ThreadLocal ...

MSDN只说

  

在.NET Framework 4中,您可以使用   System.Threading.ThreadLocal类创建线程局部对象   在首次使用对象时,它会被懒惰地初始化。对于   有关更多信息,请参阅延迟初始化。

如果我对懒惰的init很好,ThreadLocal似乎是最好的选择...它使用起来更简单,不需要转换。在选择其中一个时,还有其他需要考虑的事项吗?

1 个答案:

答案 0 :(得分: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>进行延迟初始化。你会为自己省下很多痛苦。