java
public class Singleton {
private volatile static Singleton instance = null;
// 私有化构造方法
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
C++
class singleton
{
private:
volatile static singleton* m_instance;
static pthread_mutex_t mutex;
singleton() {};
~singleton() {};
singleton(const singleton&) {};
singleton& operator=(const singleton&) {};
public:
static singleton* GetInstance();
};
singleton* singleton::GetInstance()
{
if (m_instance == NULL){
pthread_mutex_lock(&mutex);
if (m_instance == NULL){
m_instance = new singleton();
}
pthread_mutex_unlock(&mutex);
}
return m_instance;
}
pthread_mutex_t singleton::mutex = PTHREAD_MUTEX_INITIALIZER;
singleton* singleton::m_instance = NULL;