为什么在 ThreadLocal 上使用数据槽?
Why use data slot over ThreadLocal?
比较未命名数据槽和 ThreadLocal...
MSDN 只说
In the .NET Framework 4, you can use the
System.Threading.ThreadLocal class to create thread-local objects
that are initialized lazily when the object is first consumed. For
more information, see Lazy Initialization.
如果我不介意延迟初始化,那么 ThreadLocal 似乎是最佳选择……它使用起来更简单,而且不需要强制转换。选择一个而不是另一个时还有其他要考虑的事情吗?
正如我在评论中所说,ThreadLocal<T>
是使用线程本地数据槽 API 实现的。您可以通过查看 ThreadLocal source code 来确认这一点。除非你有一些令人信服的理由在 Windows API 级别工作,否则你最好使用 ThreadLocal<T>
.
选择 ThreadLocal<T>
的一个很好的理由是它确保为每个线程初始化该值。 ThreadStatic
不会那样做,你的线程本地数据槽接口 API 也必须专门为它编写代码。有关详细信息,请参阅 。
使用 ThreadLocal<T>
延迟初始化。你会避免很多痛苦。
比较未命名数据槽和 ThreadLocal...
MSDN 只说
In the .NET Framework 4, you can use the System.Threading.ThreadLocal class to create thread-local objects that are initialized lazily when the object is first consumed. For more information, see Lazy Initialization.
如果我不介意延迟初始化,那么 ThreadLocal 似乎是最佳选择……它使用起来更简单,而且不需要强制转换。选择一个而不是另一个时还有其他要考虑的事情吗?
正如我在评论中所说,ThreadLocal<T>
是使用线程本地数据槽 API 实现的。您可以通过查看 ThreadLocal source code 来确认这一点。除非你有一些令人信服的理由在 Windows API 级别工作,否则你最好使用 ThreadLocal<T>
.
选择 ThreadLocal<T>
的一个很好的理由是它确保为每个线程初始化该值。 ThreadStatic
不会那样做,你的线程本地数据槽接口 API 也必须专门为它编写代码。有关详细信息,请参阅 。
使用 ThreadLocal<T>
延迟初始化。你会避免很多痛苦。