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

溫馨提示×

c++ wait如何管理

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

在C++中,等待(wait)通常用于線程同步,以確保一個或多個線程在繼續執行之前等待某個條件成立。C++標準庫提供了多種等待機制,如條件變量(condition variables)和互斥鎖(mutexes)。以下是如何使用這些機制來管理等待的示例:

  1. 引入頭文件:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
  1. 定義互斥鎖和條件變量:
std::mutex mtx; // 互斥鎖,用于保護共享資源
std::condition_variable cv; // 條件變量,用于線程間的通信
bool ready = false; // 共享資源,表示條件是否滿足
  1. 編寫生產者和消費者線程函數:

生產者線程函數:

void producer() {
    std::unique_lock<std::mutex> lock(mtx); // 加鎖
    std::cout << "生產者生產了一個產品\n";
    ready = true; // 更新共享資源
    cv.notify_one(); // 通知消費者
}

消費者線程函數:

void consumer() {
    std::unique_lock<std::mutex> lock(mtx); // 加鎖
    cv.wait(lock, []{ return ready; }); // 等待條件滿足
    std::cout << "消費者消費了一個產品\n";
}
  1. 在主函數中創建生產者和消費者線程:
int main() {
    std::thread producer_thread(producer);
    std::thread consumer_thread(consumer);

    producer_thread.join();
    consumer_thread.join();

    return 0;
}

在這個示例中,我們使用了std::unique_lock來自動管理互斥鎖的鎖定和解鎖。當消費者線程調用cv.wait()時,它會自動釋放互斥鎖并進入等待狀態。當條件滿足時,cv.notify_one()會喚醒一個等待的線程,消費者線程會繼續執行并重新獲取互斥鎖。

注意:在實際應用中,你可能需要根據具體需求調整線程函數和同步機制。例如,你可以使用cv.notify_all()來喚醒所有等待的線程,或者使用std::shared_lock來允許多個線程同時讀取共享資源。

0
页游| 无棣县| 乾安县| 恩平市| 镇原县| 托克逊县| 环江| 福泉市| 潜山县| 壶关县| 靖边县| 遂昌县| 景宁| 眉山市| 卓资县| 雷州市| 古交市| 山东省| 汉阴县| 武邑县| 营口市| 韩城市| 文水县| 静安区| 滕州市| 金平| 双柏县| 嘉禾县| 上林县| 萝北县| 泸西县| 祁东县| 利辛县| 道真| 泰安市| 隆化县| 新宁县| 龙江县| 淮滨县| 义乌市| 南郑县|