2014-04-03 7 views
6

चलें कहना मैं अपने धागा joinable और कॉल में शामिल हो, तो my_thread.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(); 
}; 

मूल रूप से निम्नलिखित वर्ग है? आप इसके आसपास कैसे जाते हैं?

उत्तर

12

मूल रूप से, मेरे धागा joinable और join कॉल के बीच पूरा करता है, तो my_thread.join हमेशा के लिए इंतजार करेंगे?

नहीं। पूरा होने के बाद भी एक धागा अभी भी शामिल हो सकता है; एक बार यह जुड़ने या अलग होने के बाद यह केवल असंभव हो जाता है।

नियंत्रण thread ऑब्जेक्ट को नष्ट करने से पहले सभी धागे को शामिल या अलग किया जाना चाहिए।

+1

ध्यान में रखते हुए कि थ्रेड ऑब्जेक्ट्स को स्थानांतरित किया जा सकता है (जो बदलता है कि कौन सा थ्रेड ऑब्जेक्ट नियंत्रित थ्रेड ऑब्जेक्ट है)। –

संबंधित मुद्दे