通常情况下,一个单例模式是不会出问题的,但是如果在多线程的情况下,有可能会生成多个对象,以C++为例
一个普通的单例的代码如下:
class Singleton{
private:
Singleton(){}
static Singleton *_instance;
public:
static Singleton* Instance(){
if(_instance==NULL)
_instance=new Singleton;
return _instance;
}
};
Singleton* Singleton::_instance=NULL;
如果在多线程的情况下,_instance是一个共享资源,如果不进行任何保护机制的话,两个线程有可能同时进入临界区,这样这个系统会有超过一个的Singleton对象,单例也就失效了。想要保证在多线程下依然有用的话,就需要设置锁机制