2012-03-27 11 views
22

क्या सी ++ 11 में boost::thread_group जैसी कोई बात है?बढ़ावा :: सी ++ 11 में thread_group?

मैं अपने प्रोग्राम को boost:thread से C++ 11 थ्रेड तक उपयोग करने की कोशिश कर रहा हूं और कुछ भी समकक्ष नहीं ढूंढ पाया।

+4

बूस्ट धागे और सी ++ 11 धागे अलग हैं। मैं व्यक्तिगत रूप से अधिक पूर्ण एपीआई (और उदाहरण के थ्रेड स्थानीय भंडारण के वर्तमान कार्यान्वयन की कमी) के कारण बूस्ट थ्रेड का उपयोग करता रहता हूं। –

उत्तर

24

नहीं, सी ++ 11 में सीधे boost::thread_group के बराबर कुछ भी नहीं है। यदि आप चाहते हैं कि आप एक कंटेनर हैं तो आप std::vector<std::thread> का उपयोग कर सकते हैं। इसके बाद आप प्रत्येक तत्व, या जो कुछ भी join() पर कॉल करने के लिए या तो for वाक्यविन्यास या std::for_each का उपयोग कर सकते हैं।

+4

2012 से इस समस्या का बेहतर समाधान रहा है? – pyCthon

+1

मैं यह जोड़ना चाहता हूं कि 'बूस्ट :: थ्रेड_ग्रुप' में वास्तव में कोई जादू नहीं है, यह थ्रेड के वेक्टर ("थोड़ा और" कुछ उपयोगिता कार्यों जैसे 'join_all' और' create_thread') से थोड़ा अधिक है। –

5

thread_group इसे सी ++ 11 और सी ++ 14 मानकों में नहीं बनाया।

लेकिन कोई समाधान सरल है:

std::vector<std::thread> grp; 

    // to create threads 
    grp.emplace_back(functor); // pass in the argument of std::thread() 

    void join_all() { 
    for (auto& thread : grp) 
     if (thread.joinable()) 
     thread.join(); 
    }