在 C++ 中,是否可以检测线程的意外终止?

In C++, is it possible to detect the unexpected termination of a thread?

我有一个不断处理数据的后台工作线程。
(使用 std::thread 创建)

如果线程用完要处理的数据,线程将等待 - 然后在 mote 数据可用于处理时恢复。
(使用 std::condition_variable

如果此线程意外终止,我想确保线程以全新状态重新启动。

但我不知道如何检测线程终止或对其做出反应。
处理这种情况的最佳方法是什么?

线程只能以受控方式退出:线程本身决定退出,或者被另一个线程取消。唯一的其他可能性是您的程序崩溃或某些外部杀手事件。

如果您 运行 不同的进程,而不是线程,情况就会改变。在这种情况下是的,该进程可能会意外退出,您需要弄清楚如何确定它是否存在。

如果您预计线程中的某些编码会导致意外退出,您可以使用析构函数实例化一个保护 class。后者可以做一些事情来通知你的系统线程存在:

 struct Watchdog {
     ~WatchDog() {
          restartMe();
     }
  };

  void start() {
     WatchDog watcher;
     ...
   }

您可以尝试从析构函数中重新启动您的线程,或者只是通知另一个观察线程您需要重新启动这个线程。

当然,对于单独的进程,您需要一种完全不同的方法,即 heartbit ping 或其他任何方法。