线程局部存储TLS

这里说的不是ssl里得安全传输协议。它的全名是Thread-Local Storage线程局部存储。又叫TSD:Thread-Specific Data线程特有数据池

在C/C++程序中常存在全局变量、函数内定义的静态变量以及局部变量,对于局部变量来说,在栈里,其不存在线程安全问题。但是全局变量和函数内定义的静态变量就不同了。 我们可以用锁来处理(但效率太低);可以通过原子操作来实现(但不支持自定义的数据类型)
TLS这一类型的数据,在程序中每个线程都会分别维护一份变量的副本(copy),并且长期存在于该线程中,对此类变量的操作不影响其他线程。

Linux中与TLS相关的API有如下:

#include 

// Returns 0 on success, or a positive error number on error
int pthread_once (pthread_once_t *once_control, void (*init) (void));
/*利用参数once_control的状态,函数pthread_once()可以确保无论有多少个线程调用多少次该函数,也只会执行一次由init所指向的由调用者定义的函数。
*/
// Returns 0 on success, or a positive error number on error
int pthread_key_create (pthread_key_t *key, void (*destructor)(void *));

// Returns 0 on success, or a positive error number on error
int pthread_key_delete (pthread_key_t key);

// Returns 0 on success, or a positive error number on error
int pthread_setspecific (pthread_key_t key, const void *value);

// Returns pointer, or NULL if no thread-specific data is associated with key
void *pthread_getspecific (pthread_key_t key);
参考资料: Linux中的线程局部存储(一)

你可能感兴趣的:(Linux基础)