c 設計模式 單例模式

2021-09-27 12:07:50 字數 1100 閱讀 9115

單例模式一般會分為:餓漢單例和懶漢單例

餓漢式:在類載入的時候就完成初始化,所以類載入比較慢,但是獲取物件的速度是比較快的.

懶漢式:在類載入的時候不初始化,等到第一次被使用的時候才進行初始化.

餓漢式:

class singlenton;

singlenton & singlenton::getinstance()

餓漢式:

class singlenton;

singlenton * singlenton::m_instance = nullptr;

singlenton* singlenton::getinstance()

return m_instance;

}

這種方案對於多執行緒模式並不是安全的,有可能會同時建立多個物件

那麼,我們肯定會隨之進行加鎖操作,但是在這裡的話鎖的代價過高

singlenton* singlenton::getinstance() 

return m_instance;

}

執行緒a沒有釋放鎖,b無法進入,第一次之後,相當於多個執行緒僅僅是對這個地方進行讀取,而對於多執行緒讀的話是沒有必要進行加鎖,對於高併發的情況下,代價及其高昂

在這裡我們可以使用雙檢查鎖

singlenton* singlenton::getinstance() 

}return m_instance;

}

//消除代價過高的問題,對於上一次的缺陷進行完善

但是仍然有問題,記憶體讀寫reorder可能會造成不安全的情況

執行緒是在指令層級進行時間片的搶奪,cpu執行指令可能並不如我們之前的預期情況執行

std::atomicsinglenton::m_instance;

singlenton* singlenton::getinstance()

}return m_instance;

}

設計模式 C 設計模式 單例模式

設計模式 物件導向設計七大原則 設計模式 設計模式概念和分類 設計模式 c 設計模式 單例模式 設計模式 c 設計模式 工廠方法模式 設計模式 c 設計模式 抽象工廠模式 設計模式 c 設計模式 建造者模式 設計模式 c 設計模式 原型模式 作者自用的泛型單例模組 單例模式 singleton pa...

C 設計模式 (單例模式)

單例模式 顧名思義,只有乙個物件例項,即保證乙個類只有乙個物件可以使用。作用類似於乙個全域性變數,可以任意呼叫,但是比全域性變數更容易管理,使用。單例模式也有很多種實現方式 第一種實現方法 h檔案 class csock test public casyncsocket cpp檔案 csock te...

設計模式 單例模式(c )

在gof 設計模式 中,單例模式的定義為 保證乙個類僅有乙個例項,並提供乙個該例項的全域性訪問點。下面是單例模式的c 實現 方案一 建構函式和拷貝建構函式一定要宣告為private 定義static成員 單例指標和獲取單例指標的函式 static單例指標要在類外定義並初始化 實現獲取單例指標的函式時...