首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在主程序退出期间销毁等待std::conditional_variable的线程的正确方法

是使用std::condition_variable的成员函数notify_all()来通知等待的线程退出。具体步骤如下:

  1. 在主程序退出前,创建一个std::condition_variable对象和一个std::mutex对象,用于线程间的同步和通信。
  2. 在等待std::condition_variable的线程中,使用std::unique_lock<std::mutex>对象锁住std::mutex,并调用std::condition_variable的成员函数wait()等待条件满足。
  3. 在主程序退出前,调用std::condition_variable的成员函数notify_all()来通知所有等待的线程退出。
  4. 在等待std::condition_variable的线程中,当收到通知后,检查条件是否满足,如果不满足则继续等待,如果满足则退出线程。

下面是一个示例代码:

代码语言:cpp
复制
#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的线程能够正确退出,避免线程泄漏和资源浪费。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券