线程局部存储(TLS)

很多时候,我们可能想存储一些线程的私有数据,属于线程的私有变量有局部变量,函数的参数,假如我们要在线程中存储全局变量,多个线程访问都对这个变量有自己的一个副本。

一、隐式实现

__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()

你可能感兴趣的:(开发语言,etl工程师)