浅析Linux中的线程局部存储( 三 )

二、一次性初始化

在讲解线程特有数据之前 , 先让我们来了解一下一次性初始化 。 多线程程序有时有这样的需求:不管创建多少个线程 , 有些数据的初始化只能发生一次 。 列如:在C++程序中某个类在整个进程的生命周期内只能存在一个实例对象 , 在多线程的情况下 , 为了能让该对象能够安全的初始化 , 一次性初始化机制就显得尤为重要了 。 ——在设计模式中这种实现常常被称之为单例模式(Singleton) 。 Linux中提供了如下函数来实现一次性初始化:

#include <pthread.h>

// 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所指向的由调用者定义的函数 。 init所指向的函数没有任何参数 , 形式如下:

推荐阅读