是使用std::condition_variable的成员函数notify_all()来通知等待的线程退出。具体步骤如下:
下面是一个示例代码:
#include <iostream>
#include <thread>
#include <condition_variable>
std::condition_variable cv;
std::mutex mtx;
bool condition = false;
void worker_thread()
{
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return condition; });
// 执行线程任务
std::cout << "Worker thread exiting..." << std::endl;
}
int main()
{
std::thread t(worker_thread);
// 模拟主程序执行
std::this_thread::sleep_for(std::chrono::seconds(2));
// 设置条件为true,并通知等待的线程
{
std::lock_guard<std::mutex> lock(mtx);
condition = true;
}
cv.notify_all();
// 等待线程退出
t.join();
std::cout << "Main program exiting..." << std::endl;
return 0;
}
在这个示例中,worker_thread()函数是等待std::condition_variable的线程,它会在条件满足时退出。主程序中,通过设置条件为true,并调用cv.notify_all()来通知等待的线程退出。最后,主程序等待线程退出后退出。
这种方法可以确保在主程序退出期间,等待std::condition_variable的线程能够正确退出,避免线程泄漏和资源浪费。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云