2014-04-03 3 views
6

Können sagen, ich die folgende KlasseKann the thead joinable-join eine Racebedingung haben? wie kommst du rum?

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

Grundsätzlich haben, wenn mein Thread zwischen dem joinable vervollständigt und Anrufe kommen, dann wird my_thread.join ewig warten? Wie kommst du dazu?

Antwort

12

Grundsätzlich, wenn mein Faden zwischen den joinable und join Anrufe abgeschlossen ist, dann wird my_thread.join ewig warten?

Nein. Ein Thread ist noch verbindbar, nachdem er abgeschlossen wurde. es wird nur unjoinable, sobald es verbunden oder gelöst wurde.

Alle Threads müssen verbunden oder getrennt werden, bevor das steuernde Objekt thread zerstört wird.

+1

Beachten Sie, dass Thread-Objekte verschoben werden können (wodurch sich ändert, welches Thread-Objekt das steuernde Thread-Objekt ist). –

Verwandte Themen