gpt4 book ai didi

c++ - 在线程函数中处理异常

转载 作者:行者123 更新时间:2023-11-28 07:02:20 25 4
gpt4 key购买 nike

我有使用 pthread 使用 C++(不是 C++11)的多线程应用程序。所以,我有几个线程与相应的线程函数并行运行。在主线程 block 中,我有 try-catch block ,但在线程函数中,我没有。每个线程函数(除 main 外)都运行 while(1) 循环,并在主线程设置特定条件指示退出时中断。条件变量的检查和设置都在互斥保护中完成,以确保互斥。然而,在一个线程函数中,发生了一些异常,线程变成了僵尸,应用程序崩溃了。 pstack 核心无法正确显示堆栈跟踪,因为它可能已损坏。我的问题是:我是否也应该使用 try-catch block 来处理线程函数的异常?当然,在 try block 之外应该有 while(1) block 在里面,而 catch block 应该优雅地处理异常,然后可能优雅地结束。我可以将子线程的异常传递给第二个线程吗?最好不要。最佳做法应该是什么?

最佳答案

should I use try-catch block to handle exception with thread function too?

是的,因为异常是一种基于堆栈的机制。由于每个线程都有自己的堆栈,因此它有自己的异常。

如果您没有语言支持来传递异常,您将不得不求助于“手动”复制 catch 中的异常对象,并通过特定于您的线程间通信向任何需要了解它的线程发出信号设计。

关于c++ - 在线程函数中处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22257906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com