在C++中,notify_all()函數通常是和條件變量一起使用的。條件變量(condition variable)是用于線程間通信的一種機制,它允許一個線程等待另一個線程滿足特定條件后再繼續執行。
在使用notify_all()函數時,通常需要先創建一個條件變量對象和一個互斥鎖對象,然后使用互斥鎖保護共享資源,當某個線程改變了共享資源的狀態時,可以調用notify_all()函數通知其他等待的線程。
以下是一個簡單的示例代碼來演示如何使用notify_all()函數:
#include <iostream>
#include <thread>
#include <condition_variable>
std::condition_variable cv;
std::mutex mtx;
bool ready = false;
void worker_thread() {
std::unique_lock<std::mutex> lck(mtx);
// 等待條件變量滿足
cv.wait(lck, []{ return ready; });
// 條件滿足后執行的操作
std::cout << "Worker thread is processing data." << std::endl;
}
int main() {
std::thread worker(worker_thread);
{
std::lock_guard<std::mutex> lck(mtx);
// 修改共享資源的狀態
ready = true;
}
// 通知所有等待的線程條件已滿足
cv.notify_all();
worker.join();
return 0;
}
在上面的示例中,worker_thread()函數通過等待條件變量的方式來等待條件滿足,而在主線程中修改了ready變量的狀態后,調用notify_all()函數通知worker_thread()線程條件已滿足,從而執行后續操作。
需要注意的是,在使用notify_all()函數時,通常需要先獲取互斥鎖來保護共享資源,以防止多個線程同時修改共享資源導致數據競爭的問題。