看到Singleton,学过设计模式的都知道,就是单例模式,意思是保证程序在执行时某个变量只有一个实例。
class Singleton {
public:
static Singleton * getInstance() {}
private:
Singleton(): {}
~Singleton(): {}
static Singleton * instance;
}
Singleton * Singleton::instance = nullptr;
Singleton * Singleton::getInstance(){
if(!instance){
instance = new Singleton; //pos
}
return instance;
}
以上的代码只是对于单线程的,因为如果有多个线程调用getInstance,可能一个线程刚走到pos的位置,第二个线程在做if判断,那么它判断也会成立,因为此时instance并未赋值成功。
如果需要多线程实现,要应用到锁,类似进程pv操作,保证同一时间只有一个进程访问临界资源。所以getInstance()可以改成
Singleton*Singleton::getInstance()
{
static QMutex mutex;
if(!instance)
{
QMutexLocker locker(&mutex);
if(!instance)
{
instance = new Singleton;
}
}
return instance;
}