<kbd id="daqct"></kbd>

  • <nav id="daqct"></nav>
    <wbr id="daqct"><pre id="daqct"></pre></wbr>
    <wbr id="daqct"></wbr>
    <form id="daqct"><th id="daqct"></th></form>
    更多課程 選擇中心

    C/C++培訓
    達內IT學院

    400-111-8989

    關于c++11中static類對象構造函數線程安全的驗證

    • 發布:C++培訓
    • 來源:學習筆記
    • 時間:2017-05-22 13:31

    在c++11中,static靜態類對象在執行構造函數進行初始化的過程是線程安全的,有了這個特征,我們可以自己動手輕松的實現單例類,下面給出一個驗證例子:

    1.清單1:staticSafe.h

    #include <iostream>
    #include <thread>
    using namespace std;
    class Cnum
    {
    public:
        Cnum()
        {
            std::cout << "construct start" << std::endl;
            std::this_thread::sleep_for(std::chrono::seconds(5));   //構造函數中休眠5s
            num++;
            std::cout << "construct stop" << std::endl;
        }
        void Test()
        {
            std::cout << "id:" << std::this_thread::get_id()<<",num="<< num<<std::endl;    
            std::this_thread::sleep_for(std::chrono::seconds(1));
        }
        static int num;
    };

    2. 清單2:main.cpp

    int Cnum::num = 0;     //初始化靜態成員
    void func(void* argv)
    {
        int i = *(int *)argv;
        std::cout <<i<< std::endl;   //每個線程啟動時,打印線程次序號
        static Cnum a;   //內部靜態成員變量的初始化時線程安全的,只有一個線程能執行初始化,其他線程會在此阻塞
        a.Test();
    }
    void main()
    {     
        for (int i = 0; i < 10; i++)    //開啟10個線程,模擬并發訪問情形
        {
                std::thread t1(func, (void *)&i);                     
                t1.detach(); 
        }
        system("pause ");//暫停一下
    }

    3. 運行結果

    c++11中static

    從結果中可以看出:1)當打印“construct stop” 以后,其他線程才陸續執行Test函數  2) 所有線程打印的num為1。以上現象表明:當有一個線程執行static類對象的構造函數時,其他欲訪問該static類對象的線程都是阻塞的。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:C語言中函數調用的原理,C語言函數調用原理解析
    下一篇:C語言中時間的基本用法小結

    C語言創建windows窗口實例

    C++回調函數是什么?

    C++ shared_ptr和動態數組

    C語言有哪些關鍵詞,C語言44個關鍵詞大全

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美三级片,白洁外传,第四色播日韩AV第一页,啪啪免费观看大全av 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>