我对C ++ 11线程有一个奇怪的问题。 不幸的是,我无法粘贴完整的示例(鉴于复杂性),我无法在一个更简单的示例中复制该问题。
所以问题是我有一个正在运行的线程(也没有调用join
和detach
)。
在某些时候,另一个线程想要停止这个线程。实现只是将布尔变量设置为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上测试它并且没有发生。
有任何线索吗?
答案 0 :(得分:2)
如果在父进程中创建其他线程后调用fork(),则可能会发生这种情况。使子进程与父进程不同的一个重要因素是子进程只有一个线程。
所以认为有线程的所有C ++代码都会被欺骗,而join()会抛出 “没有这样的过程”。在这种情况下,因为本机调用将返回ESRCH。
在调用fork()之前不应该创建线程。