聊一聊 C# 的线程本地存储TLS到底是什么
原文中文,约5800字,阅读约需14分钟。发表于: 。一:背景 1. 讲故事有朋友在后台留言让我说一下C#的 ThreadStatic 线程本地存储是怎么玩的?这么说吧,C#的ThreadStatic是假的,因为C#完全是由CLR(C++)承载的,言外之意C#的线程本地存储,用的就是用C++运行时提供的 __declspec(thread) 或 __thread 来虚构的一套玩法,这一篇我们就来简单聊一聊。二:C# 的线程本地存储 1. 虚构在哪里在...
C#的ThreadStatic是通过C++运行时提供的__declspec(thread)或__thread来实现的。在CLR中,使用ThreadLocalInfo将变量与线程绑定。C#的线程本地存储使用静态TLS,在编译时就已经声明好,存放在TEB.ThreadLocalStoragePointer指向的指针数组中。通过windbg可以验证。C#是一种业务高层抽象的语言,理解TLS需要深入底层。