C ++ 11 Thread是可连接的,但join()引发了异常

时间:2016-08-09 10:41:43

标签: c++ multithreading c++11

我对C ++ 11线程有一个奇怪的问题。 不幸的是,我无法粘贴完整的示例(鉴于复杂性),我无法在一个更简单的示例中复制该问题。

所以问题是我有一个正在运行的线程(也没有调用joindetach)。 在某些时候,另一个线程想要停止这个线程。实现只是将布尔变量设置为false,并调用join以等待线程终止。

嗯,问题是加入。 我检查了当前线程(调用连接)与连接线程不同,joinable()返回true。 然而,这种异常发生:

libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: thread::join failed: No such process

这发生在macOS 10.11上,但我有一位同事在linux上测试它并且没有发生。

有任何线索吗?

1 个答案:

答案 0 :(得分:2)

如果在父进程中创建其他线程后调用fork(),则可能会发生这种情况。使子进程与父进程不同的一个重要因素是子进程只有一个线程。

所以认为有线程的所有C ++代码都会被欺骗,而join()会抛出 “没有这样的过程”。在这种情况下,因为本机调用将返回ESRCH。

在调用fork()之前不应该创建线程。