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

溫馨提示×

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
福安市| 同仁县| 瓦房店市| 呈贡县| 临汾市| 济阳县| 新邵县| 蒙城县| 平阳县| 宜君县| 巴东县| 宝山区| 噶尔县| 武冈市| 元朗区| 儋州市| 塘沽区| 丰顺县| 邮箱| 龙海市| 澎湖县| 林周县| 浑源县| 星子县| 雷山县| 晋州市| 吕梁市| 乡宁县| 阿拉善左旗| 阳城县| 新绛县| 衡水市| 军事| 奎屯市| 略阳县| 余庆县| 郧西县| 梁山县| 太保市| 当阳市| 邢台市|