如何在C++中实现线程类的安全退出

avatar
作者
筋斗云
阅读量:0

在C++中,为了实现线程类的安全退出,可以使用以下方法:

  1. 使用std::atomic<bool>标志来控制线程的退出。
  2. 使用std::condition_variable来通知线程退出。
  3. 使用std::mutex来保护共享数据。
  4. 使用std::threadjoin()方法来等待线程安全地退出。

下面是一个简单的示例,展示了如何实现线程类的安全退出:

#include<iostream> #include<atomic> #include<condition_variable> #include <mutex> #include<thread>  class ThreadSafeExit { public:     ThreadSafeExit() : stop_(false) {         thread_ = std::thread(&ThreadSafeExit::run, this);     }      ~ThreadSafeExit() {         stop();     }      void stop() {         if (!stop_.load()) {             stop_.store(true);             cv_.notify_one();             thread_.join();         }     }  private:     void run() {         while (!stop_.load()) {             // 在这里执行你的任务             std::unique_lock<std::mutex> lock(mutex_);             cv_.wait(lock, [this] { return stop_.load(); });         }     }      std::atomic<bool> stop_;     std::condition_variable cv_;     std::mutex mutex_;     std::thread thread_; };  int main() {     ThreadSafeExit tse;     // 在这里执行其他任务     tse.stop();     return 0; } 

在这个示例中,我们创建了一个名为ThreadSafeExit的类,它包含一个std::atomic<bool>类型的标志stop_,用于控制线程的退出。当stop()方法被调用时,stop_会被设置为true,并通过std::condition_variablenotify_one()方法通知线程退出。线程在执行任务时会定期检查stop_的值,如果发现stop_true,则退出循环并结束线程。最后,我们在析构函数中调用stop()方法来确保线程安全地退出。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!