यदि आपने std::thread
और मुख्य धागे (या उस मामले के लिए कोई अन्य धागा) के बीच चर साझा किया है, तो क्या आप अभी भी उन साझा चरों तक पहुंच सकते हैं आप थ्रेड बनाने के तुरंत बाद thread::detach()
विधि निष्पादित करते हैं?सी ++ 11 std :: thread :: साझा डेटा तक पहुंच और पहुंच
उत्तर
हाँ! detach()
पर कॉल करने के बाद वैश्विक, कब्जे वाले और पास-इन चर अभी भी पहुंच योग्य हैं।
हालांकि, अगर आप अलग-अलग कॉल कर रहे हैं, तो संभवतः आप थ्रेड बनाने वाले फ़ंक्शन से वापस लौटना चाहते हैं, जिससे थ्रेड ऑब्जेक्ट को दायरे से बाहर जाने की इजाजत मिलती है। यदि ऐसा है, तो आपको ध्यान रखना होगा कि उस फ़ंक्शन के स्थानीय भी संदर्भ में या पॉइंटर के माध्यम से धागे को पास नहीं किए गए थे।
आप घोषणा के रूप में detach()
के बारे में सोच सकते हैं कि धागे को बनाने के थ्रेड के लिए स्थानीय की आवश्यकता नहीं है।
निम्नलिखित उदाहरण में, धागा स्कोप से बाहर होने के बाद शुरुआती धागे के ढेर पर int
तक पहुंचता रहता है। यह अपरिभाषित व्यवहार है!
- घोषित
int
कहीं कि क्षेत्र से बाहर किसी भी धागे की जरूरत है कि के जीवनकाल के दौरान नहीं जाना होगा:void start_thread() { int someInt = 5; std::thread t([&]() { while (true) { // Will print someInt (5) repeatedly until we return. Then, // undefined behavior! std::cout << someInt << std::endl; } }); t.detach(); }
यहाँ कुछ संभव तरीके से अपने धागा के नीचे से बाहर बह जाने से गलीचा रखने के लिए कर रहे हैं यह (शायद एक वैश्विक)।
- साझा डेटा को
std::shared_ptr
के रूप में घोषित करें और इसे थ्रेड में मान दें। - धागे में मूल्य (एक प्रति प्रदर्शन) द्वारा पास करें।
- धागे में रैवल्यू संदर्भ (एक चाल प्रदर्शन) द्वारा पास करें।
हां। धागे को अलग करने का मतलब यह है कि जब यह समाप्त हो जाता है तो यह स्वयं के बाद साफ हो जाता है और आपको अब join
करने की अनुमति नहीं है।
- 1. सिग्नल हैंडलर से साझा डेटा तक पहुंच
- 2. Flixster डेटा तक पहुंच
- 3. सी ++: अभिभावक विधियों और चरों तक पहुंच
- 4. कच्चे संपर्क डेटा तक पहुंच
- 5. साझा स्मृति परमाणु पहुंच
- 6. सी ++ 11; क्या गैर स्थैतिक डेटा सदस्य प्रारंभिक अन्य डेटा सदस्यों तक पहुंच सकते हैं?
- 7. std :: thread
- 8. निजी सदस्यों तक पहुंच
- 9. पिक्सेल मानों तक पहुंच ओपनसीवी 2.3 - सी ++
- 10. JAR संसाधनों तक पहुंच
- 11. निजी क्षेत्रों तक पहुंच
- 12. डी कंटेनर तक पहुंच
- 13. ओकैमल रिकॉर्ड तक पहुंच
- 14. रेल तक पहुंच मॉडल
- 15. स्प्रिंग डेटा मोंगोडीबी: उप दस्तावेजों तक पहुंच और अद्यतन
- 16. विरासत और मैत्री पहुंच। सी ++
- 17. Azure MySQL सेवा तक पहुंच
- 18. साझा ऑब्जेक्ट में प्रतीकों तक पहुंच प्रतिबंधित कैसे करें?
- 19. संदर्भ के बिना साझा किए गए संदर्भों तक पहुंच
- 20. WP7 फोन फ़ाइलों और फ़ोल्डरों तक पहुंच
- 21. सी ++ 11 std :: array
- 22. आईफोन संगीत पुस्तकालय तक पहुंच
- 23. जेएमटर स्क्रिप्ट पथ तक पहुंच
- 24. जावा कॉल स्टैक तक पहुंच
- 25. टेम्पलेट से मॉडल तक पहुंच
- 26. उपकरण परीक्षण संसाधनों तक पहुंच
- 27. उद्देश्य-सी मैं self.view तक पहुंच सकता हूं लेकिन self.view.frame
- 28. Jquery मोबाइल, सूची से विस्तार पृष्ठ तक पहुंच (गतिशील डेटा)
- 29. द्विआधारी डेटा संरचनाओं को पढ़ने/लिखते समय बिटफील्ड तक पहुंच
- 30. सी ++ 11 std lib