[英]proper way of handling std::thread termination in child process after fork()
皱眉尽可能多,我还是要去做:)
我的问题是:在以下代码中,处理fork()
生成的子std::thread
中std::thread
终止的正确方法是什么? std::thread::detach()
还是std::thread::join()
?
#include <thread>
#include <iostream>
#include <unistd.h>
struct A {
void Fork()
{
std::thread t(&A::Parallel, this);
pid_t pid = fork();
if(pid) {
//parent
t.join();
} else {
//child
t.join(); // OR t.detach()?
}
}
void Parallel()
{
std::cout << "asd" << std::endl;
}
};
int main() {
A a;
a.Fork();
return 0;
}
我知道只有调用fork()
的线程是重复的,这意味着std::thread
实际上在子进程中什么也不做,对吗? 因此,我对此表示怀疑。
根据fork
描述 ,正确的方法是仅从父进程调用t.join()
,因为子进程仅复制调用者线程。
还要注意,多线程程序中的子进程仅允许调用可用于信号处理程序和exec
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.