我有点困惑,但我的问题很简单。
我有一堆线程,我想通过在主线程中处理其他线程发送的所有异常来集中处理错误。
- 我是否在每个线程的每个
catch
子句中使用全局共享exception_ptr
并使用std::current_exception()
?还是我需要为不同的线程设置不同的excpetion_ptr
对象?我想保留所有异常(exception)情况。 - 将
current_exception
分配给exc_ptr
变量后,当我从主线程访问exc_ptr
时,是否需要同步从主线程读取?
最佳答案
您只想将那些未被从属线程处理的异常传播到主线程。这意味着您只需要在从属线程的最顶层处理程序中使用 exception_ptr
。
我认为最简单的方法是拥有一个包含 exception_ptr
的全局容器(例如生产者/消费者队列)。每个顶级线程异常处理程序将其异常推送到队列并退出。主处理程序从队列中提取异常并重新抛出。当然,您需要对队列进行适当的同步。一旦您将 exceoption_ptr
从队列中拉出,您就不需要同步它,因为创建它的线程不会再接触它。
也应该可以有一个全局exception_ptr
(相当于容量为 1 的队列,并以大致相同的方式同步)。
关于c++ - 线程之间的异常。我需要多少 std::exception_ptr 和同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38888020/