c 11 call once 使用方法

2021-10-20 14:02:41 字數 1407 閱讀 2750

call_once是c++11中引入的新特性,用於保證某個函式只呼叫一次,即使是多執行緒環境下,它也可以可靠地完成一次函式呼叫。特別適用於某個初始化只執行一次的場景。

若呼叫call_once一切順利,將會翻轉once_flag變數的內部狀態,再次呼叫該函式時,所對應的目標函式不會被執行。

若呼叫call_once中發生異常,不會翻轉once_flag變數的內部狀態,再次呼叫該函式時,目標函式仍然嘗試執行。

下面**是在win7+vs2015編譯器測試通過,演示了如何使用c++11 中的call_once方法

#include "stdafx.h"

#include #include #include #include //單利模式應用

class csinglton

//在析構函式中釋放例項物件

~csinglton()

}public:

//(3)獲得本類例項的唯一全域性訪問點

static csinglton* getinstance()

catch (...)

}//例項已經存在,直接該例項物件

return pinstance;

}static void createinstance()

}private:

static csinglton* pinstance;//(2)唯一例項物件

static std::once_flag m_flag;

};csinglton* csinglton::pinstance = null;

//構造 once_flag 物件,內部狀態被設為指示函式仍未被呼叫。

std::once_flag csinglton::m_flag;

//輔助測試**

std::mutex g_mutex;

void printinstanceaddr()

int main()

for (int i = 0; i < 5; i++)

return 0;

}

執行結果:

0076e778

0076e778

0076e778

0076e778

0076e778

注意:上面的單例模式即直接按下面那樣不加鎖,不用std::call_once呼叫,在多執行緒中會因為執行緒競爭而導致不正確的結果出現。

//(3)獲得本類例項的唯一全域性訪問點

static csinglton* getinstance()

catch (...)

}//例項已經存在,直接該例項物件

return pinstance;

}

本文**:

參考資料:

C 介面使用方法

之前一直不理解介面這一概念,今天無意中翻書,網上查資料悟道其中的道理,現在工作沒有用到inte ce這一塊,怕以後會遇到忘記實現的方法便記錄下來,寫的不對希望讀者指出,話不多說,接下來看我對介面的理解。1.介面說明 介面為不同應用的實現提供了一中規範和約束,只要每個應用都遵守這種規範和約束,整個系統...

C 引用使用方法

引用是c 對c的擴充。在c c 中指標的作用基本都是一樣的,但c 增加了另外一種給函式傳遞位址的途徑,這就是引用傳遞,它也存在其他程式語言中 1.引用的實質是一段連續空間的別名 2.程式中通過變數來申請並命名記憶體空間 3.通過變數的名字可以使用記憶體空間 引用相當於給變數取別名 基本語法 type...

pythonpip使用方法 pip使用方法整理

匯出專案已安裝的pip包 pip list 檢視專案中安裝的包 pip freeze requirements.txt 將專案中所用到的第三方庫輸出到requirements.txt中 pip install 版本號 pip install i 本次使用清華源進行安裝 離線安裝第三方庫 一鍵安裝整個...