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

溫馨提示×

c++ wait能自定義嗎

c++
小樊
81
2024-11-24 04:38:41
欄目: 編程語言

在C++中,wait()函數通常與條件變量一起使用,用于讓當前線程等待某個條件成立。wait()函數本身不能直接自定義,但你可以通過條件變量來實現自定義的等待邏輯。

以下是一個簡單的示例,展示了如何使用條件變量和wait()函數實現自定義等待邏輯:

#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); // 當前線程被阻塞,直到 condition 變量變為 true
    }
    std::cout << "thread " << id << '\n';
}

void go() {
    std::this_thread::sleep_for(std::chrono::seconds(1));
    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;
}

在這個示例中,我們創建了一個名為ready的共享變量,用于表示條件是否滿足。我們還創建了一個條件變量cv和一個互斥鎖mtxprint_id函數中的線程會等待ready變量變為true,然后繼續執行。go函數中的線程會將ready變量設置為true,并通過cv.notify_all()喚醒所有等待的線程。

這個示例展示了如何使用條件變量和wait()函數實現自定義等待邏輯。你可以根據自己的需求修改這個示例,以實現更復雜的同步和通信場景。

0
乌鲁木齐市| 龙南县| 鄂托克旗| 凌源市| 荥阳市| 乃东县| 景宁| 八宿县| 绥阳县| 吴川市| 晋州市| 克拉玛依市| 五峰| 巨野县| 阳城县| 华阴市| 德清县| 那曲县| 遵化市| 龙泉市| 陆河县| 满洲里市| 丰城市| 筠连县| 荥经县| 神木县| 武山县| 三门县| 玉环县| 双城市| 淳安县| 陈巴尔虎旗| 敖汉旗| 类乌齐县| 乐都县| 徐闻县| 乾安县| 宾川县| 永福县| 吴桥县| 南雄市|