其他写法的单例模式就不多说了,主要说下多线程同时执行的情况下的单例模式。
为了多线程执行时的安全性,该单例模式使用了锁的机制,防止数据一边在“读”,一边在“写”,导致数据不完整。
在本人做的一个海外的项目时就遇到了这个问题,当时查了很久,熬了2个通宵,最后查到是多线程并发执行时对数据库中的数据没有加锁同步导致的。跑题了,接着下面讲述C++中的单例模式的使用。
单例模式只有一个实例,节省了资源,提高了效率,由于单例模式的实例是共享的,因此一定要做好保护,防止数据破坏,使用了double加锁对数据进行保护的机制,由于对公司的负责,只写出了关键部分的代码,如下:
class Singleton
{
private:
Singleton() {}
static Singleton *instance;
public:
static Singleton *getInstance();
};
Singleton *Singleton::getInstance()
{
if (NULL == instance)
{
lock();//加锁
if (NULL == instance)
{
instance = new Singleton();
}
unlock();//解锁
}
return instance;
}