在C++中,可以使用std::condition_variable
來實現線程同步的notify_all
操作。以下是一個簡單的示例代碼:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker_func(int id) {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; });
std::cout << "Worker " << id << " is working" << std::endl;
}
int main() {
std::thread workers[3];
for (int i = 0; i < 3; i++) {
workers[i] = std::thread(worker_func, i);
}
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_all();
for (int i = 0; i < 3; i++) {
workers[i].join();
}
return 0;
}
在上面的代碼中,我們創建了一個std::condition_variable
對象cv
來實現線程同步。在worker_func
函數中,線程會等待在cv
上,直到ready
變量變為true
,然后才會執行工作。在主函數中,我們使用std::lock_guard
來保護ready
變量的修改,并使用cv.notify_all()
通知所有等待在cv
上的線程可以繼續執行了。最后,我們使用join()
函數等待所有線程執行完畢。
希望這個例子可以幫助理解如何在C++中使用std::condition_variable
來實現線程同步的notify_all
操作。