Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何监视意外退出的线程?_C++_Multithreading - Fatal编程技术网

C++ 如何监视意外退出的线程?

C++ 如何监视意外退出的线程?,c++,multithreading,C++,Multithreading,在多线程编程中,如果一个工作线程意外退出,而主线程需要知道该线程是否处于活动状态,该怎么办 有没有办法检查一下 我想知道当工作线程退出时是否有一个典型的信号 (Linux) 谢谢如果程序中的线程意外死亡,那就太糟糕了。如果需要故障隔离和恢复,请使用多个进程(具有共享内存),而不是或不使用线程。在POSIX(以及Win32)上,您可以检测进程共享互斥体的所有者是否在持有该互斥体时死亡,并对共享数据执行一些“类似fsck”的检查和修复,以尝试恢复其不变量。(如果在设计数据结构时考虑到可恢复事务,显然

在多线程编程中,如果一个工作线程意外退出,而主线程需要知道该线程是否处于活动状态,该怎么办

有没有办法检查一下

我想知道当工作线程退出时是否有一个典型的信号

(Linux)


谢谢

如果程序中的线程意外死亡,那就太糟糕了。如果需要故障隔离和恢复,请使用多个进程(具有共享内存),而不是或不使用线程。在POSIX(以及Win32)上,您可以检测进程共享互斥体的所有者是否在持有该互斥体时死亡,并对共享数据执行一些“类似fsck”的检查和修复,以尝试恢复其不变量。(如果在设计数据结构时考虑到可恢复事务,显然会对您有所帮助。)

在Win32上,您可以使用Windows结构化异常处理(SEH)捕获线程中的任何类型的异常。(例如访问冲突、被零除等)。使用工具帮助API,您可以获得附加模块的列表,并且有用于读取机器寄存器、故障地址等的接口

在POSIX中,您可以通过信号处理来实现这一点。访问冲突之类的事件将信号传递给它们所属的线程


将这些片段编码成一种恢复策略,试图让一个有缺陷的程序继续运行,这似乎不现实。

可能与井重复。。使用flag似乎没用,因为我一直在谈论“意外退出”。。。如果它很好地退出,我可以使用这些方法,谢谢。在我写这篇文章之前,请阅读这些问题:DDo您有一个大
尝试。。。每个螺纹体周围的锁销
?您可以捕获任何抛出的执行选项并使用
cout-hmm-no。。我还没试过接球。。我也必须考虑一下,嗯,仍然没有得到大局,尽管哈哈,我已经发现通过发送pthread_kill(threadId,0),你可以检查线程的活跃性(不会真正杀死它)。现在我想知道如何释放意外死线程的资源。。我想我可以用pthread\u create\u键来实现这一点。。。还在找办法吗