2013-08-14 7 views
5

शुरू करने के लिए प्रतीक्षा कर रहा है जब तक इसे बनाए जाने के बाद सी ++ 11 धागा शुरू नहीं किया जाता है? ऐसा लगता है कि इसके लिए कोई तरीका नहीं है, कुछ अन्य थ्रेडिंग लाइब्रेरीज़ (जैसे क्यूटी) के विपरीत जो यह जांचने के लिए एक विशेष विधि प्रदान करता है कि थ्रेड चल रहा है या नहीं।सी ++ 11 थ्रेड के लिए वास्तव में

+3

इसके लिए आपका उपयोग केस क्या है? – Casey

+0

हां, कृपया उपयोग केस का वर्णन करें। जैसे ही वे बनाए जाते हैं, सी ++ 11 थ्रेड "प्रारंभ" होते हैं। क्या आप "जीवित/प्रगति" बनाम "समाप्त/समाप्त" की कुछ धारणा के साथ थ्रेड एपीआई का विस्तार करना चाहते हैं? क्या आप थ्रेड गतिविधि को दूसरे के साथ सिंक्रनाइज़ करना चाहते हैं? क्या आप स्पष्ट रूप से शुरू होने तक नए धागे को "रुका" होना चाहते हैं? आदि – pilcrow

+2

"वास्तव में शुरू" का क्या अर्थ है? – Casey

उत्तर

11

भाषा परिभाषा की आवश्यकता है कि नया धागा कन्स्ट्रक्टर रिटर्न से पहले शुरू हो गया हो। औपचारिक रूप से, यह [thread.thread.constr]/5 है: "कन्स्ट्रक्टर के आमंत्रण की समाप्ति एफ की प्रतिलिपि की शुरुआत के साथ सिंक्रनाइज़ होती है।"

5

मुझे यकीन है कि तुम क्यों यह एक पहली जगह में शुरू करने के लिए के लिए प्रतीक्षा करने की आवश्यकता है नहीं कर रहा हूँ, लेकिन अगर आप ऐसा करेंगे, तो आप एक म्युटेक्स, एक शर्त का उपयोग करना चाहिए, और एक झंडा संकेत या शुरू कर दिया है या नहीं। एक नए बनाए गए धागे में, mutex को लॉक करें, ध्वज को «सत्य» पर सेट करें और एक सशर्त चर पर वेटर को सूचित करें। कोड में जो थ्रेड बनाता है, म्यूटेक्स को लॉक करता है, और ध्वज की जांच करता है। अगर ध्वज «सत्य» है - आपका धागा शुरू हो गया है, अगर यह «झूठा» है तो एक सशर्त चर पर प्रतीक्षा करें और एक बार जागने के बाद दोहराएं।

+0

धन्यवाद। मैं उम्मीद कर रहा था कि एक बेहतर समाधान है जिसे मैं याद कर रहा हूं, लेकिन मुझे नहीं लगता। –

+0

या Win32 में किसी ईवेंट की तरह एक प्रतीक्षा करने योग्य ऑब्जेक्ट का उपयोग करें, तो आपको म्यूटेक्स या ध्वज की आवश्यकता नहीं है, केवल यह स्थिति सशर्त के रूप में कार्य कर रही है। या, केवल एक बूल ध्वज का उपयोग करें, और ध्वज सेट होने तक थ्रेड लूप बनाना है। इसे लॉक करने की कोई ज़रूरत नहीं है। –

+0

@pilcrow: और यदि नहीं? –

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