c++11 call_once 使用方法
生活随笔
收集整理的這篇文章主要介紹了
c++11 call_once 使用方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
call_once是c++11中引入的新特性,用于保證某個函數只調用一次,即使是多線程環境下,它也可以可靠地完成一次函數調用。特別適用于某個初始化只執行一次的場景。
若調用call_once一切順利,將會翻轉once_flag變量的內部狀態,再次調用該函數時,所對應的目標函數不會被執行。
若調用call_once中發生異常,不會翻轉once_flag變量的內部狀態,再次調用該函數時,目標函數仍然嘗試執行。
下面代碼是在win7+vs2015編譯器測試通過,演示了如何使用c++11 中的call_once方法
?
運行結果:
0076E778 0076E778 0076E778 0076E778 0076E778注意:上面的單例模式即直接按下面那樣不加鎖,不用std::call_once調用,在多線程中會因為線程競爭而導致不正確的結果出現。
//(3)獲得本類實例的唯一全局訪問點static CSinglton* GetInstance(){//若實例不存在,則嘗試創建實例對象if (NULL == pInstance){try {CreateInstance);}catch (...) {std::cout << "CreateInstance error\n";}}//實例已經存在,直接該實例對象return pInstance;}本文轉自:https://blog.csdn.net/c_base_jin/article/details/79307262?
參考資料:
http://zh.cppreference.com/w/cpp/thread/call_once
http://www.cplusplus.com/reference/mutex/call_once/?kw=call_once
總結
以上是生活随笔為你收集整理的c++11 call_once 使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 投资1000万!宁德时代设立新公司 涉及
- 下一篇: C++11保护共享数据的其他方法