इसे बनाने के लिए प्रयोग किया जाता है सुनिश्चित करें कि एक मूल्य पूरे
पर यह पढ़ा/लिखा जाएगा यह परमाणुता का एक छोटा सा हिस्सा है। इसके मूल में इसका मतलब है "अनइंटरप्टिबल", एक प्रोसेसर पर एक निर्देश जिसका दुष्प्रभाव किसी अन्य निर्देश के साथ नहीं किया जा सकता है। डिज़ाइन द्वारा, एक मेमोरी अपडेट परमाणु होता है जब इसे एक मेमोरी-बस चक्र के साथ निष्पादित किया जा सकता है। कौन सा स्मृति स्थान के पते गठबंधन, इसलिए किसी एक चक्र इसे अपडेट कर सकते होने की आवश्यकता है। एक असाइन किए गए पहुंच के लिए अतिरिक्त कार्य, एक चक्र द्वारा लिखे गए बाइट्स का हिस्सा और दूसरे भाग के लिए आवश्यक है। अब यह अब निर्बाध नहीं है।
संरेखित अपडेट हो रही है, बहुत आसान है यह संकलक द्वारा प्रदान की गारंटी नहीं है। या, अधिक मोटे तौर पर, स्मृति मॉडल के आधार पर संकलक द्वारा कार्यान्वित। जो मेमोरी पतों को आसानी से चुनता है जो गठबंधन होते हैं, कभी-कभी जानबूझकर कुछ बाइट्स के अप्रयुक्त अंतराल को छोड़कर अगले चर संरेखित होते हैं। प्रोसेसर के मूल शब्द आकार से बड़ा एक चर के लिए एक अद्यतन कभी परमाणु नहीं हो सकता है।
लेकिन अधिक महत्वपूर्ण प्रोसेसर निर्देश की तरह आप सूत्रण काम करने की जरूरत है। प्रत्येक प्रोसेसर CAS instruction, तुलना-और-स्वैप का एक संस्करण लागू करता है। यह मूल परमाणु निर्देश है जिसे आपको सिंक्रनाइज़ेशन को लागू करने की आवश्यकता है। उच्च स्तरीय सिंक्रनाइज़ेशन प्राइमेटिव, जैसे मॉनीटर (उर्फ हालत चर), म्यूटेक्स, संकेत, महत्वपूर्ण अनुभाग और सेमफोर सभी मूल निर्देश के शीर्ष पर बनाए जाते हैं।
न्यूनतम है यही कारण है, एक प्रोसेसर आमतौर पर साधारण संचालन परमाणु बनाने के लिए अतिरिक्त लोगों को प्रदान करते हैं। एक चर को बढ़ाने की तरह, इसके मूल पर एक इंटरप्टिबल ऑपरेशन के बाद से इसे एक रीड-संशोधित-लेखन ऑपरेशन की आवश्यकता होती है। इसकी आवश्यकता होने पर परमाणु होना बहुत आम है, अधिकांश सी ++ प्रोग्राम संदर्भ गिनती को लागू करने के लिए उदाहरण पर निर्भर करता है।
अस्थिरता सभी
यह नहीं है पर धागा सुरक्षा की गारंटी नहीं देता है। यह एक विशेषता है जो बहुत आसान समय से होती है, जब मशीनों में केवल एक प्रोसेसर कोर होता था। यह केवल कोड पीढ़ी को प्रभावित करता है, विशेष रूप से जिस तरह से कोड अनुकूलक मेमोरी एक्सेस को खत्म करने का प्रयास करता है और इसके बजाय प्रोसेसर रजिस्टर में मान की एक प्रति का उपयोग करता है। कोड निष्पादन गति में एक बड़ा, बड़ा अंतर बनाता है, एक रजिस्टर से मूल्य पढ़ने से स्मृति से इसे पढ़ने से 3 गुना तेज होता है।
अस्थिर लागू करना सुनिश्चित करता है कि कोड ऑप्टिमाइज़र रजिस्टर में मान को सटीक नहीं मानता है और इसे फिर से स्मृति पढ़ने के लिए मजबूर करता है। यह वास्तव में केवल उन स्मृति मानों पर महत्वपूर्ण है जो स्वयं द्वारा स्थिर नहीं हैं, वे डिवाइस जो मेमोरी-मैप किए गए I/O के माध्यम से अपने रजिस्टरों का पर्दाफाश करते हैं। कमजोर स्मृति मॉडल के साथ प्रोसेसर के शीर्ष पर अर्थशास्त्र डालने का प्रयास करने के लिए उस मूल अर्थ के बाद इसका भारी दुरुपयोग किया गया है, Itanium सबसे गंभीर उदाहरण है। अस्थिर के साथ आपको जो मिलता है वह आज आपके द्वारा उपयोग किए जाने वाले विशिष्ट कंपाइलर और रनटाइम पर निर्भर करता है। थ्रेड-सुरक्षा के लिए इसका कभी भी उपयोग न करें, इसके बजाय हमेशा सिंक्रनाइज़ेशन आदिम का उपयोग करें।
बस जा रहा है परमाणु/अस्थिर धागा सुरक्षित है कि अगर सच था
प्रोग्रामिंग बहुत सरल होता है। परमाणु संचालन केवल बहुत ही सरल संचालन को कवर करते हैं, एक वास्तविक कार्यक्रम को अक्सर एक संपूर्ण ऑब्जेक्ट थ्रेड-सुरक्षित रखने की आवश्यकता होती है। अपने सभी सदस्यों को परमाणु रूप से अपडेट किया गया है और आंशिक रूप से अद्यतन किए गए ऑब्जेक्ट के दृश्य का खुलासा नहीं किया है। एक सूची को पुनरावृत्ति के रूप में सरल कुछ मूल उदाहरण है, जब आप इसके तत्वों को देख रहे हों तो सूची में संशोधन करने के लिए आपके पास कोई अन्य थ्रेड नहीं हो सकता है। यही वह समय है जब आपको उच्च स्तरीय सिंक्रनाइज़ेशन प्राइमेटिव्स तक पहुंचने की आवश्यकता होती है, जो कि आगे बढ़ने के लिए सुरक्षित होने तक कोड को अवरुद्ध कर सकता है।
वास्तविक कार्यक्रम अक्सर इस सिंक्रनाइज़ेशन आवश्यकता से पीड़ित होते हैं और Amdahls' law व्यवहार प्रदर्शित करते हैं। दूसरे शब्दों में, एक अतिरिक्त धागा जोड़ना वास्तव में प्रोग्राम को तेज़ नहीं बनाता है। कभी-कभी वास्तव में इसे धीमा कर देता है। इसके लिए किसी को भी बेहतर माउस-जाल मिल जाता है, नोबेल की गारंटी है, हम अभी भी प्रतीक्षा कर रहे हैं।
'अस्थिर' का मतलब केवल एक चीज है - एक चर के लिए बार-बार उपयोग को अनुकूलित न करें। यह परमाणुता या ऑपरेशन रीडरिंग या कैश कोहेरेंसी पर कोई संयम नहीं रखता है। –