在C++多線程編程中,notify
通常與條件變量(condition variables)一起使用,以實現線程間的同步和通信。條件變量允許一個或多個線程等待,直到另一個線程發出通知為止。這種機制可以用于解決生產者-消費者問題、讀者-寫者問題等常見的并發問題。
notify
函數有兩種形式:notify_one
和notify_all
。notify_one
會喚醒一個正在等待的線程,而notify_all
會喚醒所有正在等待的線程。
下面是一個簡單的示例,展示了如何在C++中使用std::condition_variable
和notify
函數實現多線程同步:
#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
的值。