单例模式(C++)
其他寫法的單例模式就不多說了,主要說下多線程同時執(zhí)行的情況下的單例模式。
為了多線程執(zhí)行時的安全性,該單例模式使用了鎖的機(jī)制,防止數(shù)據(jù)一邊在“讀”,一邊在“寫”,導(dǎo)致數(shù)據(jù)不完整。
在本人做的一個海外的項目時就遇到了這個問題,當(dāng)時查了很久,熬了2個通宵,最后查到是多線程并發(fā)執(zhí)行時對數(shù)據(jù)庫中的數(shù)據(jù)沒有加鎖同步導(dǎo)致的。跑題了,接著下面講述C++中的單例模式的使用。
單例模式只有一個實例,節(jié)省了資源,提高了效率,由于單例模式的實例是共享的,因此一定要做好保護(hù),防止數(shù)據(jù)破壞,使用了double加鎖對數(shù)據(jù)進(jìn)行保護(hù)的機(jī)制,由于對公司的負(fù)責(zé),只寫出了關(guān)鍵部分的代碼,如下:
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; }
總結(jié)
- 上一篇: Android MMKV框架引入使用
- 下一篇: php程序员如何转go,写给 PHP 程