2012-12-19 24 views
8

में शामिल हों मैं एक प्रक्रिया में लगभग 300 बूस्ट थ्रेड बना रहा हूं। क्या थ्रेड आईडी के आधार पर एक विशिष्ट थ्रेड में शामिल होने का कोई तरीका है?एक विशिष्ट बूस्ट थ्रेड

+3

आप उन धागे का प्रबंधन कैसे कर रहे हैं? (आप किसी भी तरह से थ्रेड्स को बंद करते हैं, क्या आप?) –

उत्तर

9

यह स्वर्गीय निर्भर करता है कि आप boost::thread एस को कैसे सहेजते हैं। आप (T = boost::thread* के साथ) एक कंटेनर में उन्हें बचाने के, तो आप बस कुछ

for(iterator it = ctn.begin(); it != ctn.end(); ++it){ 
    if(it->get_id() == join_thread_id){ 
     it->join(); 
     break; 
    }   
} 

की तरह उपयोग कर सकते हैं लेकिन यदि आप अपने सूत्र कहीं नहीं सहेजते हैं और सिर्फ सूचक यह संभव नहीं है बचत को बढ़ावा देने नहीं करता है के बाद से बिना new boost::thread का उपयोग कोई स्वचालित बहीखाता कार्यक्षमता प्रदान नहीं करते हैं।

1. टिप्पणी: ध्यान रखें कि आपको आईडी को बचाने के लिए boost::thread::id का उपयोग करने की आवश्यकता होगी।
2. टिप्पणी: std::map<boost::thread::id,boost::thread*> ऐसे कार्यों के लिए आसान हो सकता है।

+1

या 'find_if (शुरू करें (सीटीएन), अंत (सीटीएन), [join_thread_id] (इसे पुनरावर्तक करें) {इसे वापस करें-> get_id() == join_thread_id;}); ' –

+0

यदि बहुत सारे धागे हैं, तो नक्शा बेहतर नहीं है? मैं इसे दिमाग में प्रदर्शन के साथ पूछ रहा हूं। –

+0

@ एड्रीसीएस .: यह 'बहुत सारे' के अर्थ पर निर्भर करता है। एक नक्शा स्केल की संख्या (उप-रैखिक लुकअप जटिलता) की संख्या के साथ अच्छा है, लेकिन वस्तुओं की वास्तविक संख्या के आधार पर, एक छोटा वेक्टर एक छोटे से मानचित्र से बेहतर प्रदर्शन कर सकता है। –