[英]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.