阅读量:0
在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
操作。