【问题标题】:std::thread supposedly leading to unusable stack trace据称 std::thread 导致不可用的堆栈跟踪
【发布时间】:2018-08-16 08:34:20
【问题描述】:
这个问题与std::thread 的所谓劣势有关。昨天我正在随便遍历 Lyft 流行的开源分布式代理 envoy。当我研究他们的线程部分时,我遇到了一条引起我注意的评论。 comment 表示如下:
pthread 线程的包装器。我们不使用 std::thread 因为它吃异常并导致不可用的堆栈跟踪
我不确定 吃异常和不可用的堆栈跟踪是什么意思。
谁能解释它的含义以及为什么std::thread 会导致不可靠的堆栈跟踪?
【问题讨论】:
标签:
c++
multithreading
pthreads
stdthread
【解决方案2】:
C++ 标准对 std::threads 中未捕获的异常有如下说明:
In [thread.thread.constr]:
... 如果调用 INVOKE(DECAY_COPY(std::forward(f)),
DECAY_COPY(std::forward(args))...) 以
未捕获的异常,应调用终止。
据此,答案
谁能解释它的含义以及为什么std::thread 会导致不可靠的堆栈跟踪?
除非在线程 proc 本身中以专用方式处理,否则线程只会在异常时终止,并且启动线程的代码堆栈不会更明智地了解所发生的事情。