उदाहरण कोडक्या जीसीसी में स्थैतिक चर थ्रेड-सुरक्षित हैं?
void foo()
{
static Bar b;
...
}
में जीसीसी साथ संकलित यह गारंटी है कि b
बनाया है और एक धागे-सुरक्षित तरीके से प्रारंभ हो जाएगा?
अतिरिक्त कोड threadsafe के लिए दिनचर्या सी ++ ABI में निर्दिष्ट उपयोग करने के लिए उत्सर्जन नहीं है:
जीसीसी के आदमी पृष्ठ में, -fno-threadsafe-स्टैटिक्स कमांड लाइन विकल्प पाया स्थानीय सांख्यिकी का प्रारंभिकरण। आप पर इस विकल्प का उपयोग कोड में कोड आकार को कम कर सकते हैं को थ्रेड-सुरक्षित होने की आवश्यकता नहीं है।
यह मतलब यह है, कि स्थानीय स्टैटिक्स जीसीसी के साथ डिफ़ॉल्ट रूप से धागे की सुरक्षित हैं? इसलिए स्पष्ट गार्डिंग को रखने का कोई कारण नहीं है उदा।
pthread_mutex_lock/unlock
के साथ?पोर्टेबल कोड कैसे लिखें - यह जांचने के लिए कि क्या कंपाइलर अपने गार्ड जोड़ देगा? या जीसीसी की इस सुविधा को बंद करना बेहतर है?
यदि आपके पास थ्रेड-सुरक्षित (स्थानीय फ़ंक्शन) पहुंच नहीं है तो थ्रेड-सुरक्षित प्रारंभिकता क्या उपयोग है? – xtofl
mutex को आरंभ करने के लिए आप अन्य चरों तक पहुंच को नियंत्रित करने के लिए उपयोग करेंगे। – AProgrammer
यदि आपको पोर्टेबल कोड लिखना है, तो आप फंक्शन स्टेटिक्स के थ्रेड सुरक्षित प्रारंभिक पर भरोसा नहीं कर सकते हैं। उदाहरण के लिए एमएस सी ++ ऐसा नहीं करता है। तो मैं बिंदु 2 पर असहमत हूं - यदि आप पोर्टेबल कोड लिखना चाहते हैं, तो आप इसे सुरक्षित रूप से अक्षम कर सकते हैं, लेकिन आपको फ़ंक्शन स्टेटिक्स का उपयोग नहीं करना चाहिए जहां थ्रेड सुरक्षा महत्वपूर्ण है ;-) – hirschhornsalz