सी ++ 11 thread-safe initialization of static variables जैसी सुविधाओं के प्रदान करता है, और कहा कि यह प्रश्न पूछते हैं, उदाहरण के लिए कहूँगा का हवाला देते हुए:क्या कोई सी ++ 11 थ्रेड-सुरक्षा गारंटी सी ++ 11 के साथ संकलित/लिंक किए गए तृतीय-पक्ष थ्रेड पुस्तकालयों पर लागू होती है?
Logger& g_logger() {
static Logger lg;
return lg;
}
तो जाहिरा तौर पर यह सच की परवाह किए बिना कि क्या एक मॉड्यूल एक सी ++ 11 संकलक के साथ संकलित (?) थ्रेड हेडर शामिल थे, या अपने शरीर में किसी भी धागे पैदा किया। आपको गारंटी दी जाती है भले ही यह किसी अन्य मॉड्यूल के खिलाफ जुड़ा हुआ हो जो C++ 11 थ्रेड का उपयोग करता है और फ़ंक्शन कहलाता है।
लेकिन यदि आपका "अन्य मॉड्यूल" जो इस कोड में कॉल करता है तो सी ++ 11 धागे का उपयोग नहीं कर रहा था, लेकिन क्यूटी के QThread
जैसे कुछ। क्या इस तरह की गारंटी देने के लिए सी ++ 11 की क्षमता के दायरे के बाहर स्थैतिक पर परमाणु प्रारंभिक है? या सी ++ 11 के साथ संकलित मॉड्यूल का केवल तथ्य है और फिर अन्य सी ++ 11 कोड के खिलाफ जुड़ा हुआ है, यह दर्शाता है कि आपको गारंटी मिलेगी?
क्या किसी को भी एक अच्छा संदर्भ पता है जहां इस तरह के मुद्दे शामिल हैं?
स्थैतिक प्रारंभिकरण एक भाषा संपत्ति है। मैं नहीं देखता कि यह एक विशिष्ट पुस्तकालय से कैसे प्रभावित हो सकता है। – pmr
@pmr यह मेरे लिए थोड़ा मुश्किल लगता है क्योंकि - उदाहरण के लिए - उपर्युक्त स्थिर के लिए स्मृति कार्यक्रम की शुरुआत में आवंटित की जाती है, लेकिन कन्स्ट्रक्टर पहली बार कार्य के अंदर स्थिर के साथ फ़ंक्शन चलाता है। ऐसा करने के लिए अंतर्निहित थ्रेड मॉडल के बारे में एक सर्वज्ञता की आवश्यकता होगी, इसलिए मुझे संदेह है कि QThread/C++ 11thread को मिश्रित करने पर यह सही हो सकता है ... हालांकि नई बाइनरी आवश्यकताओं का मामूली मौका है जो इसे काम करता है । – HostileFork
@ होस्टाइलफ़र्क: जब तक दोनों (सी ++ और क्यूटी) थ्रेडिंग के लिए एक ही ओएस सुविधाओं का उपयोग करते हैं, तो मुझे नहीं लगता कि कुछ गलत कैसे हो सकता है। इसके अलावा मुझे नहीं पता कि दोनों में से किसी को ओएस थ्रेडिंग सुविधाओं का उपयोग क्यों नहीं करना चाहिए। – PlasmaHH