簡體   English   中英

在fork()之后子進程中處理std :: thread終止的正確方法

[英]proper way of handling std::thread termination in child process after fork()

皺眉盡可能多,我還是要去做:)

我的問題是:在以下代碼中,處理fork()生成的子std::threadstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM