一:背景
1. 讲故事
有朋友在后台留言让我说一下C#的 ThreadStatic 线程本地存储是怎么玩的?这么说吧,C#的ThreadStatic是假的,因为C#完全是由CLR(C++)承载的,言外之意C#的线程本地存储,用的就是用C++运行时提供的 __declspec(thread) 或 __thread 来虚构的一套玩法,这一篇我们就来简单聊一聊。
二:C# 的线程本地存储
1. 虚构在哪里
在 C# 中使用ThreadStatic就可以将变量和线程进行绑定,参考代码如下:
internal class Program
{
[ThreadStatic]
public static int num = 10;
static void Main(string[] args)
{
Console.WriteLine($"num={num}");
Debugger.Break();
}
}
在 CLR 中如何将 num 与 Thread 绑定呢?研究过 CLR 源码的朋友应该知道是用 ThreadLocalInfo 的,参考代码如下:
#i
订阅专栏 解锁全文
1400

被折叠的 条评论
为什么被折叠?



