91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何在C++中結合setevent實現線程同步

c++
小樊
84
2024-08-27 13:19:21
欄目: 編程語言

在C++中,可以使用std::condition_variablestd::mutex來實現線程同步

#include<iostream>
#include<thread>
#include <mutex>
#include<condition_variable>

std::mutex mtx;
std::condition_variable cv;
bool ready = false;

void print_id(int id) {
    std::unique_lock<std::mutex> lck(mtx);
    while (!ready) {  // 如果ready為false,則等待
        cv.wait(lck);  // 當前線程被阻塞,等待條件變量被通知
    }
    // 現在線程繼續執行
    std::cout << "thread " << id << '\n';
}

void go() {
    std::unique_lock<std::mutex> lck(mtx);
    ready = true;  // 修改共享變量
    cv.notify_all();  // 喚醒所有等待的線程
}

int main() {
    std::thread threads[10];
    // spawn 10 threads:
    for (int i = 0; i < 10; ++i)
        threads[i] = std::thread(print_id, i);

    std::cout << "10 threads ready to race...\n";
    go();  // go!

    for (auto &th : threads) th.join();

    return 0;
}

在這個例子中,我們創建了10個線程,每個線程都會執行print_id函數。這些線程在開始時會獲取互斥鎖并檢查ready變量。如果readyfalse,線程將調用cv.wait(lck)進入等待狀態,此時線程會釋放互斥鎖并被阻塞。當go函數被調用時,ready變量被設置為true,并調用cv.notify_all()喚醒所有等待的線程。一旦線程收到通知,它將重新獲取互斥鎖并繼續執行。

0
兴安盟| 台北县| 东山县| 古交市| 澄迈县| 张家港市| 东辽县| 满洲里市| 通渭县| 繁峙县| 加查县| 揭东县| 凤台县| 山东| 长泰县| 屏山县| 佛教| 利津县| 甘谷县| 汉沽区| 玉屏| 定南县| 灵璧县| 张家界市| 江门市| 永顺县| 建阳市| 建昌县| 东乌珠穆沁旗| 巴林右旗| 龙江县| 溧水县| 临猗县| 景泰县| 阳山县| 北海市| 静乐县| 天全县| 油尖旺区| 闽清县| 马尔康县|