我们的iOS崩溃报告工具列出了std :: thread :: detach:
引发的许多异常Fatal Exception: std::__1::system_error thread::detach failed: No such process
由于我们的实现没有检查std :: thread实例是否可以连接,我们认为问题可能是线程已经终止,所以我们尝试使用代码重现问题,例如
for (int i=0; i < 1000; i++)
{
std::thread noneThread([]() {
int a = 3;
});
assert(noneThread.joinable());
noneThread.detach();
}
此代码在iOS,MacOS X和Ubuntu上正常工作,因为documentation解释了它:
已完成代码但尚未加入的线程 仍然被认为是一个活跃的执行线程,因此 可连接。
在调用detach之前检查joinable可以避免异常,但是不能回答以下问题