五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

c++多個線程函數(shù)對同一變量操作,如何枷鎖

2023-04-04 10:45 作者:大衣哥編程  | 我要投稿
  • 每個線程用不同的線程函數(shù)
    例如:
    std::mutex mutex_;
    void func1()
    {
    ??? std::cout << "func1" << std::endl;
    ??? std::lock_guard<std::mutex> lck(mutex_);
    ??? std::this_thread::sleep_for(std::chrono::seconds(7));
    ??? std::cout << "func1 end" << std::endl;
    }

    void func2()
    {
    ??? std::cout << "func2" << std::endl;
    ??? std::lock_guard<std::mutex> lck(mutex_);
    ??? std::cout << "func2 coming" << std::endl;
    ??? std::this_thread::sleep_for(std::chrono::seconds(3));
    ??? std::cout << "func2 end" << std::endl;
    }

    int main()
    {
    ??? std::thread t1(func1);
    ??? std::this_thread::sleep_for(std::chrono::seconds(2));
    ??? std::thread t2(func2);
    ??? std::this_thread::sleep_for(std::chrono::seconds(15));
    }
    由于我們在定義t1線程后,休眠了2秒,則基本可以保證:func1函數(shù) 執(zhí)行到定義鎖且到了睡眠7秒的地方了,此時線程2才開始,
    由于線程1先獲取到鎖且睡眠7秒,因此:線程2必須等7秒后才能輸出 func2 coming

  • 多個線程公用一個線程函數(shù)

    int counter = 0;
    void increase(int count) {
    ??? for (size_t i = 0; i < count; i++)
    ??? {
    ??????? /*std::lock_guard<std::mutex> lck(mutex_);*/
    ??????? std::this_thread::sleep_for(std::chrono::milliseconds(1));
    ??????? counter++;
    ??? }
    }

    測試:std::thread t1(increase, 5000);
    ??? std::thread t2(increase, 5000);
    ??? t1.join();
    ??? t2.join();
    ??? std::this_thread::sleep_for(std::chrono::seconds(5));
    ??? std::cout << "counter:" << counter << std::endl;

    結(jié)果:counter值并不是10000,說明了2個線程函數(shù)執(zhí)行時有對同counter變量修改存在問題,執(zhí)行3次結(jié)果都不同:

于是:通過枷鎖,來實現(xiàn)互斥訪問:
for (size_t i = 0; i < count; i++)
??? {
??????? std::lock_guard<std::mutex> lck(mutex_);
??????? std::this_thread::sleep_for(std::chrono::milliseconds(1));
??????? counter++;
??? }執(zhí)行3次結(jié)果如下,均為10000:

當然了,也可以在2個線程函數(shù)里執(zhí)行,枷鎖后效果一樣的。

c++多個線程函數(shù)對同一變量操作,如何枷鎖的評論 (共 條)

分享到微博請遵守國家法律
安仁县| 淳化县| 新乐市| 大港区| 东乡族自治县| 逊克县| 岳阳县| 兴山县| 双流县| 嵩明县| 随州市| 峡江县| 天柱县| 壤塘县| 威信县| 洞头县| 桂林市| 永修县| 诸暨市| 太谷县| 临沭县| 丰台区| 达州市| 封丘县| 观塘区| 清苑县| 襄城县| 昌都县| 阳信县| 苍溪县| 桐乡市| 淄博市| 博野县| 综艺| 盐亭县| 寻乌县| 永昌县| 朝阳县| 黎城县| 朝阳市| 平武县|