tls有两种,一种是静态的,一种是动态的;
动态的自不必说,单表那静态的:
对于栈内的临时变量当然不存在线程局部问题(他本来就是线程局部的)。而全局变量是对所有
线程可见的.并且所有的线程存取的都是同内存一位置,为了使某个全局变量局部于线程,则可
声明如下:__declspec( thread ) int tls_i = 1; 那么不同的线程存取的将是不同内存位置的tls_i;
对于如下语句:
int n = tls_i;
反汇编可看到:
...
mov         ecx,dword ptr [__tls_index (004237cc)]
mov         edx,dword ptr fs:[2Ch]
mov         eax,dword ptr [edx+ecx*4]
mov         ecx,dword ptr [eax+104h]
mov         dword ptr [ebp-2Ch],ecx
...
实际上编译器处理tls_i的存取时使用了__tls_index,而不仅仅是运行几条mov语句...