2014-04-03 22 views
6

可以說我有以下類theadd joinable-join是否具有競爭條件?你如何解決它?

class A 
{ 
public: 
    A() 
    { 
     my_thread=std::thread(std::bind(&A::foo, this)); 
    } 
    ~A() 
    { 
     if (my_thread.joinable()) 
     { 
      my_thread.join(); 
     } 
    } 
private: 
    std::thread my_thread; 
    int foo(); 
}; 

基本上,如果我的線程被結合並加入通話,然後my_thread.join將等待永遠之間完成?你如何解決這個問題?

回答

12

基本上,如果我的線程joinablejoin電話之間完成,然後my_thread.join將永遠等待?

否。線程在完成後仍然可以連接;一旦它被連接或分離,它就會變成不可連接的。

在控制對象被銷燬之前,所有線程必須被連接或分離。

+1

請記住,線程對象可以被移動(它改變哪個線程對象是控制線程對象)。 –