मुझे याद है कि विधियों के अंदर घोषित स्थिर चर को थ्रेड-सुरक्षित नहीं है। (What about the Meyer's singleton? देखें के रूप में Todd Gardner ने उल्लेख किया)म्यूटक्सिंग के बिना थ्रेड-सुरक्षित स्थिर चर?
Dog* MyClass::BadMethod()
{
static Dog dog("Lassie");
return &dog;
}
मेरे पुस्तकालय अपने आवेदन के हिस्से के रूप संकलित करने के लिए उत्पन्न करता है सी ++ अंत उपयोगकर्ताओं के लिए कोड। जो कोड उत्पन्न करता है उसे थ्रेड-सुरक्षित क्रॉस-प्लेटफ़ॉर्म तरीके से स्थिर चर प्रारंभ करने की आवश्यकता होती है। मैं वैरिएबल प्रारंभिकता को म्यूटेक्स करने के लिए boost::call_once
का उपयोग करना चाहता हूं लेकिन फिर अंतिम उपयोगकर्ता बूस्ट निर्भरता के संपर्क में आते हैं।
क्या अंत उपयोगकर्ताओं पर अतिरिक्त निर्भरताओं को मजबूर किए बिना ऐसा करने का कोई तरीका है?
आप अपने आप में बूस्ट लाइब्रेरीज़ में भी स्थिर रूप से लिंक कर सकते हैं, फिर आप अपने उपयोगकर्ताओं को असुविधाजनक डर के बिना जो कुछ भी चाहते हैं उसे बढ़ावा दे सकते हैं। – Ben
संभावित डुप्लिकेट [क्या स्थानीय स्थैतिक वैरिएबल प्रारंभिक थ्रेड-सुरक्षित सी ++ 11 में है?] (Http://stackoverflow.com/questions/8102125/is-local-static-variable-initialization-thread-safe-in-c11) –
@LucianAdrianGrijincu, यह प्रश्न सी ++ 11 (इसे 200 9 में पोस्ट किया गया था) की भविष्यवाणी करता है, हालांकि आपका प्रश्न संबंधित है, यह सख्त डुप्लिकेट नहीं है। लिंक के लिए धन्यवाद। – Gili