Roy*_*mir 12 .net c# clr multithreading .net-4.0
正在使用类名访问静态字段,如下所示:
public class Me()
{
public static int a=5;
}
Run Code Online (Sandbox Code Playgroud)
我可以访问它Me.a,因此它附加到类.
但是当我看到:
static ThreadLocal<int> _x = new ThreadLocal<int> (() => 3);
Run Code Online (Sandbox Code Playgroud)
它保证每个线程看到不同的副本_x.
难道我们不是只看到static每个类而不是每个线程?如何ThreadLocal管理为每个线程提供不同的副本_x?
Hen*_*man 12
我们只是看到静态是每个类而不是每个线程?
是.因此,假设一个ThreadLocal<T>实例拥有一个static Dictionary<Thread, T>查找当前线程的值的实例.
这可能不是它实际上如何运作,但它是一个简单的解释,它是如何可能的.你可以自己写.
根据_x其static说明符,参考确实是每个类一个.但是,只有引用将在所有线程之间共享,而不是其对象内的值.访问时_x.Value,ThreadLocal<T>调用在当前线程上提供存储的系统特定代码,并读取或写入该特定于线程的存储.