亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

c++ wait有何作用

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

在C++中,wait()函數主要用于線程同步。它用于讓當前線程暫停執行一段時間或者等待某個條件成立。wait()函數通常與條件變量(condition variable)一起使用,以實現線程間的協作。

wait()函數的主要作用有以下幾點:

  1. 暫停執行:當前線程調用wait()函數后,會立即停止執行,進入等待狀態。直到其他線程調用相同對象的notify()notify_one()函數,當前線程才會被喚醒并繼續執行。

  2. 條件等待:wait()函數可以與條件變量一起使用,讓線程在滿足特定條件時等待。當條件不滿足時,線程會被喚醒并繼續執行。這樣可以避免線程在條件不滿足時不斷檢查條件,從而提高程序的性能。

  3. 線程間同步:wait()函數可以用于實現線程間的同步,例如生產者-消費者問題。生產者線程在生產完數據后,調用notify()notify_one()函數喚醒等待的消費者線程;消費者線程在消費完數據后,調用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); // 當前線程被阻塞, 當全局變量 ready 變為 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;
}

在這個示例中,我們創建了10個線程,它們調用print_id()函數。print_id()函數會檢查全局變量ready是否為true,如果為false,則調用wait()函數進入等待狀態。當主線程調用go()函數時,它會修改ready變量為true并調用notify_all()函數喚醒所有等待的線程。這樣,所有的線程就會在條件滿足時繼續執行。

0
神农架林区| 宣城市| 通辽市| 原平市| 天水市| 贺州市| 深圳市| 石屏县| 宁乡县| 大洼县| 孙吴县| 苏尼特右旗| 沧州市| 遵义市| 巩留县| 洛川县| 长海县| 定陶县| 宣武区| 珠海市| 渭源县| 阿拉善盟| 乌鲁木齐市| 喀什市| 铅山县| 荣昌县| 河西区| 图木舒克市| 云浮市| 棋牌| 鄂托克前旗| 丹江口市| 佛冈县| 黄冈市| 山东省| 廊坊市| 麟游县| 闽侯县| 米林县| 海阳市| 乳源|