设计模式之单例模式

定义

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在现实生活中,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) 禁止编译器对涉及变量的指令做优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值