सी 11 में अस्थिर चर
सी 11 मानक में एक बहु-थ्रेडेड मशीन मॉडल की शुरूआत अस्थिर के व्यवहार के बारे में सवाल उठाती है वेरिएबल, जिनका उपयोग परंपरागत रूप से अनुकूलन को रोकने के लिए किया जाता है जिसके परिणामस्वरूप समवर्ती वातावरण में अपरिभाषित व्यवहार हो सकता है।
सी 98/03 में, मेमोरी मॉडल में मल्टी-थ्रेडिंग की पहचान की कमी का मतलब था कि कंपाइलर अनुकूलन कर सकता है एक अस्थिर चर के पढ़ने से, एक अंतहीन लूप के कुख्यात उदाहरण की ओर अग्रसर होता है जो एक चर के मूल्य को बदलने की प्रतीक्षा कर रहा है।
हालांकि, सी 11 मेमोरी मॉडल चर के समवर्ती पहुंच की संभावना को स्वीकार करता है। क्या इसका मतलब यह है कि volatile अब अप्रचलित है? हालांकि यह मल्टी-थ्रेडिंग को पहचानता है, यह उचित सिंक्रनाइज़ेशन के बिना चर तक पहुंचने पर अपरिभाषित व्यवहार की संभावना को खत्म नहीं करता है। बहु-थ्रेडेड वातावरण में भी, साझा चर तक गैर-परमाणु पहुंच अपरिभाषित रहती है।
volatile int x;void func() { x = 0;
जबकि (x = = 0) {}}
इसलिए, हमारे उदाहरण कोड में, कंपाइलर अभी भी while लूप में x की रीडिंग को अनुकूलित करने के लिए स्वतंत्र है, जिसके परिणामस्वरूप अपरिभाषित व्यवहार होता है। वोलेटाइल केवल मेमोरी एक्सेस को प्रभावित करता है, थ्रेडिंग व्यवहार को नहीं। . सी 11 मेमोरी मॉडल विशेष रूप से परिभाषित करता है कि लेखन कब और कैसे अन्य थ्रेड्स को दिखाई देता है। अस्थिर इस आवश्यकता को संबोधित नहीं करता है। ताले या परमाणु संचालन जैसे सिंक्रनाइज़ेशन निर्माणों द्वारा जारी मेमोरी बाधाएं, यह सुनिश्चित करने के लिए आवश्यक हैं कि लेखन कोर के बीच सिंक्रनाइज़ हो। उन अनुकूलन को रोकने के लिए जो गलत मेमोरी एक्सेस का कारण बन सकते हैं। हालाँकि, यह मल्टीथ्रेडेड प्रोग्रामिंग के लिए पर्याप्त नहीं है। समवर्ती वातावरण में थ्रेड अखंडता और परिभाषित व्यवहार की गारंटी के लिए उचित सिंक्रनाइज़ेशन तंत्र की अभी भी आवश्यकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3