溫馨提示×

C++ notify在多線程編程中的應用

c++
小樊
151
2024-08-29 07:25:05
欄目: 編程語言

在C++多線程編程中,notify通常與條件變量(condition variables)一起使用,以實現線程間的同步和通信。條件變量允許一個或多個線程等待,直到另一個線程發出通知為止。這種機制可以用于解決生產者-消費者問題、讀者-寫者問題等常見的并發問題。

notify函數有兩種形式:notify_onenotify_all。notify_one會喚醒一個正在等待的線程,而notify_all會喚醒所有正在等待的線程。

下面是一個簡單的示例,展示了如何在C++中使用std::condition_variablenotify函數實現多線程同步:

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

std::mutex mtx;
std::condition_variable cv;
int value = 0;

void worker_thread() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, [] { return value != 0; }); // 等待條件滿足
    std::cout << "Worker thread executed, value: "<< value<< std::endl;
}

int main() {
    std::thread worker(worker_thread);

    {
        std::lock_guard<std::mutex> lock(mtx);
        std::cout << "Main thread setting value to 10"<< std::endl;
        value = 10;
    }

    cv.notify_one(); // 通知等待的線程

    worker.join();
    return 0;
}

在這個示例中,我們創建了一個工作線程worker_thread,它會等待value變量的值不為0。主線程在設置value為10后,使用cv.notify_one()喚醒等待的工作線程。這樣,工作線程可以繼續執行,并輸出value的值。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女