2014-04-03 10 views
6

Powiedzmy mam następujące klasyCzy thead connect-join może mieć warunki wyścigu? jak sobie z tym radzisz?

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(); 
}; 

Zasadniczo, jeśli mój wątek zakończy między PŁYCIE i dołącz do rozmowy, a następnie my_thread.join będzie czekać w nieskończoność? Jak sobie z tym poradzisz?

Odpowiedz

12

Zasadniczo, jeśli mój wątek zakończy między joinable i join połączeń, a następnie my_thread.join będzie czekać w nieskończoność?

Nr Wątek nadal można dołączyć po zakończeniu; staje się nieodłączny dopiero po połączeniu lub oderwaniu.

Wszystkie wątki muszą zostać połączone lub odłączone, zanim obiekt kontrolny zostanie zniszczony.

+1

Pamiętając o tym, że można przenosić obiekty wątków (co zmienia obiekt, który jest kontrolującym obiektem wątku). –

Powiązane problemy