合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
有朋友在微信里面问我,为什么用 ThreadStatic 标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问了,那我试着帮他解答一下,也给后面类似疑问的朋友解个惑吧。
为了方便讲述,定义一个 ThreadStatic 的变量,然后用多个线程去访问,参考代码如下:
internal class Program
{
[ThreadStatic]
public static int num = 10;
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
/// <summary>
/// 1. 特性方式
/// </summary>
static void Test()
{
var t1 = new Thread(() =>
{
Debugger.Break();
var j = num;
Console.WriteLine($"tid={Thread.CurrentThread.ManagedThreadId}, num={j}");
});
t1.Start();
t1.Join();
var t2 = new Thread(() =>
{
Debugger.Break();
var j = num;
Console.WriteLine($"tid={Thread.CurrentThread.ManagedThreadId}, num={j}");
});
t2.Start();
}
}
TOP