网站前台模块包括什么软件应用商店aso优化
很多时候,我们可能想存储一些线程的私有数据,属于线程的私有变量有局部变量,函数的参数,假如我们要在线程中存储全局变量,多个线程访问都对这个变量有自己的一个副本。
一、隐式实现
__thread int a; //linux
__declspec int a; //windows
windows的tls实现原理,编译器会把a变量放到PE文件的.tls段中,当系统启动一个线程时候,会从进程的堆中分配一块足够的大小空间,然后把.tls段中的内容复制到这个空间,于是每个线程都有自己的独立的.tls副本,所以对于__declspec int a定义的同一个变量,他们在不同的线程有不同的地址。
二、显式实现
Windows:TlsAlloc() TlsGetValue() TlsSetValue() TlsFree()这四个函数
Linuxs: pthread_key_create() pthread_getspecific() pthread_setspecific pthread_key_delete()