定义
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在现实生活中,windows系统下的任务管理器就是典型的单例模式的应用。单例模式的定义决定了其在实现单例模式时须满足以下三个条件:
- 构造函数私有化;
- 自行创建唯一实例,并向用户公布返回该实例的接口;
- 定义一个唯一对象。
通用代码
class Singleton3
{
public:
static Singleton3 *GetInstance () //公布对象接口
{
//锁的双重判断
if (sobj == NULL)
{
pthread_mutex_lock (&mutex);
if (sobj == NULL)
{
sobj = new Singleton3();
}
pthread_mutex_unlock(&mutex);
}
return sobj;
}
~Singleton3()
{
pthread_mutex_destroy (&mutex);
}
private:
Singleton3(){} //构造函数私有化
static Singleton3 * volatile sobj; //定义一个唯一对象
static pthread_mutex_t mutex;
};
Singleton3 * volatile Singleton3 :: sobj = NULL;
pthread_mutex_t Singleton3 :: mutex = PTHREAD_MUTEX_INITIALIZER;
本段代码考虑到多线程安全问题,使用了锁的双重判断,考虑到编译器的指令优化,使用volatile 关键字修改对象指针。
volatile关键字有以下两个作用:
(1) 禁止变量被缓存;
(2) 禁止编译器对涉及变量的指令做优化。