版本1:
pthread_once 保证多线程环境下懒汉单例模式安全
atexit 注册程序结束时的销毁函数,自动销毁单实例
int pthread_once(pthread_once_t * once_control , void(* init_routine)(void));
1.其中pthread_once_t once_control = PTHREAD_ONCE_INIT;
2.init_routine是函数指针
3.使用相同的once_control的pthread_once() 的后续调用不能调用init_routine
4.成功返回0 失败返回 error number
int atexit(void (*function)(void))
1.成功返回0 失败返回 error number
2.可以重复调用
#include <stdlib.h>
#include <pthread.h>
#include <iostream>
using std::cout;
using std::endl;
class Singleton
{
public:
static Singleton * getInstance()
{
pthread_once(&_once_control, init_routine); //静态成员函数只能使用静态成员,故_once_control、init_routine函数指针为static
return _pInstance;
}
static void init_routine() //多线程环境仍然能保证仅执行一次 -> 创建单实例对象+注册atexit函数
{
_pInstance = new Singleton;
atexit(destroy);