單例用到鎖的定義實現:
mutex.h
#pragma once
#include#includeusing namespace std;
class imylock
virtual void lock() const = 0;
virtual void unlock() const = 0;
};class mutex:public imylock
;class clock
;
#include"mutex.h"
mutex::mutex()
mutex::~mutex()
void mutex::lock()const
void mutex::unlock()const
clock::clock(const imylock& m) :m_lock(m)
clock::~clock()
有三種方式實現單例:有單執行緒、和多執行緒安全的
#pragma once
#include#include"mutex.h"
using namespace std;
using std::_atomic_counter_t;
class singleton
singleton(const singleton& singleton)
private:
static singleton* m_lpsingleton;
static imylock * mutex;
};
#include"singleton.h"
singleton* singleton::m_lpsingleton = new singleton();
imylock* singleton::mutex = new mutex();
singleton* singleton::getstance()
//1-2 鎖加在裡面,判斷倆次
//singleton* singleton::getstance()
//// return m_lpsingleton;
//}// 1-3 在1-2版本中會存在如下問題:
/*在new singleton是先分配記憶體然後呼叫singleton建構函式,然後將位址給m_lpsingleton,但是會出現意外
分配完記憶體之後就賦值給m_lpsingleton,然後在呼叫建構函式.此時獲取的例項就不是真實的物件位址了。
*//*c++ 11版本之後的跨平台實現(volatile)
std::atomicsingleton::m_instance;
std::mutex singleton::m_mutex;
singleton* singleton::getstance()
} return tmp;
}*/
設計者模式 單例模式學習
單例模式是一種物件建立模式,它用於產生乙個物件的具體例項,它可以確保系統中的乙個類只產生乙個例項。在面試中經常會遇到,手寫一種單例模式實現方式,而單例的實現方式有 懶漢式 餓漢式 執行緒安全式 雙重檢查式和靜態內部類方式,為了便於學習記憶記錄一下。需要時建立乙個例項,所以第乙個是執行緒不安全的 pu...
c 設計者模式 工廠模式
1 面向介面程式設計 最簡單的表現形式是,你的變數要宣告成抽象基類 2 為什麼要實現面向介面程式設計 設計原則 依賴倒置原則 應該依賴抽象而不是細節。3 抽象基類是不能建立的,不能new的。4 建立物件的方法 除了在棧上 或者是在堆上建立物件,也可以通過方法返回物件。5 虛函式 執行時的依賴 模式定...
C 設計者模式 策略模式
策略模式 某些物件使用的演算法可能多種多樣,經常改變,如果將這些演算法編碼到 中,會使 變得異常負責,而且有時候支援不使用的演算法可能是一種效能負擔。對於上面描述可以舉如下的列子解釋。比如如下 所示 pragma once includeusing namespace std 假如我們要實現乙個功能...