1.线程安全
若函数可同时提供多个线程安全使用,则称之为线程安全函数.
不安全的原因:使用了在所有线程之间共享的全局或静态变量。
实现线程安全方法:使用互斥量
2.可重入函数和不可重入函数
可重入函数则无需使用互斥量即可实现线程安全。其要诀在于,避免对全局和静态变量的使用。
3.一次性初始化
phtread_once() 可以确保无论有多少线程调用,也只会执行一次由 init 执行的调用者定义的函数.
4.线程特有数据
线程特有数据,可以无需修改函数接口,而实现已有函数的线程安全。
线程特有数据使得每个调用线程维护一份变量的副本.
pthread_key_create();
pthread_setspecific();
pthread_getspecific();
5.线程局部存储
类似于线程特有数据,线程局部数据提供了持久的每线程存储。
优点:比线程特有数据简单,只需简单的在全局或静态变量的声明中包含 __thread 说明即可。
static __thread buf[MAX_ERROR_LEN] ;
凡带有这种说明符的变量,每个线程都拥有一份对变量的拷贝。线程局部存储中的变量将一直存在,直到
线程终止,届时将自动释放这一存储。