这篇文章总结几种比较常用的设计模式,,,不懂得设计模式。。。怎么敢称熟悉OOP思想。
单例模式的核心结构中只包含一个被称为单例类的特殊类,通过单例模式可以保证系统中一个类只有一个实例
由于快加载单例模式是线程安全的,所以本文只讨论懒加载单例模式的线程安全问题
版本一 使用懒加载(快加载),程序调用时再分配内存,然后初始化
class Singleton
{
public:
static Singleton* getInstance() //该公有接口专门返回对象实例
{
if(sobj == NULL)
{
sobj = new Signleton();//懒加载,懒加载,程序调用时才生分配内存
}
return sobj;
}
private:
Singlenton(){}; //私有化构造函数
static Singlenton *sobj;
}
signlenton* signlenton::sobj = NULL;//慢加载,程序调用时才会生成,然后初始化
上述代码存在线程安全问题,if语句非原子操作,多线程调用时,会存在竞态条件
版本二 使用懒加载,考虑到多线程安全问题,使用互斥锁可以解决
1,考虑多线程调用时,是否存在竞态条件
2