线程间异常.我需要多少std::exception_ptr和同步?
Exception between threads. How many std::exception_ptr and synchronization I need?
我有点困惑,但我的问题很简单。
我有一堆线程,我想通过在主线程中处理其他线程发送的所有异常来集中错误处理。
- 我是否使用共享的
exception_ptr
全局,并在每个线程的每个catch
子句中使用std::current_exception()
?或者我是否需要为不同的线程使用不同的excpetion_ptr
对象?我想保留所有例外。 - 一旦
current_exception
被分配给exc_ptr
变量,当我从主线程访问exc_ptr
时,我需要同步从主线程读取吗?
您只希望将那些不由从属线程处理的异常传播到主线程。这意味着您只需要在从属线程的最顶层处理程序中使用exception_ptr
。
我认为最简单的方法是有一个全局容器(例如生产者/消费者队列)的 exception_ptr
s。每个顶级线程异常处理程序将其异常推入队列并退出。主处理程序从队列中提取异常并重新抛出。当然,您需要对队列进行适当的同步。一旦你从队列中取出exceoption_ptr
,你就不需要同步它了,因为创建它的线程不会再碰它了。
也应该可以有一个全局exception_ptr
(相当于容量为1的队列,并以相同的方式同步)。
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 为重写std::exception的库生成swig接口时出错
- 什么是 std::exception::what() 以及为什么要使用它?
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 链表"exception thrown"
- 为什么程序员同时使用 std::bad_alloc 和 std::exception.是否 std::例外 仅是不够的
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- C++ broken_promise exception
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- QVTKWidget SetRenderWindow() with PCLVisualizer Exception