單例模式(C++):其他寫法的單例模式就不多說了,主要說下多線程同時執行的情況下的單例模式。為了多線程執行時的安全性,該單例模式使用了鎖的機制,防止數據一邊在“讀”,一邊在“寫”,導致數據不完整。
在本人做的一個海外的項目時就遇到了這個問題,當時查了很久,熬了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;
}