निम्न स्तर परमाणु संचालन। ये अनिवार्य रूप से हार्डवेयर में लागू म्यूटेक्स हैं, सिवाय इसके कि आप केवल कुछ ही संचालन कर सकते हैं।
निम्नलिखित बराबर स्यूडोकोड पर विचार करें:
mutex global_mutex;
void InterlockedAdd(int& dest, int value) {
scoped_lock lock(mutex);
dest += value;
}
int InterlockedRead(int& src) {
scoped_lock lock(mutex);
return src;
}
void InterlockedWrite(int& dest, int value) {
scoped_lock lock(mutex);
dest = value;
}
इन कार्यों सीपीयू द्वारा निर्देश के रूप में लागू किया जाता है, और वे विभिन्न डिग्री के धागे के बीच स्थिरता की गारंटी। सटीक अर्थशास्त्र प्रश्न में सीपीयू पर निर्भर करता है। x86 अनुक्रमिक स्थिरता प्रदान करता है। इसका मतलब है कि ऑपरेशन कार्य करते हैं जैसे कि वे कुछ क्रम में अनुक्रमिक रूप से जारी किए गए थे। यह स्पष्ट रूप से थोड़ा अवरुद्ध करना शामिल है।
आप सटीक रूप से अनुमान लगा सकते हैं कि परमाणु संचालन म्यूटेक्स के संदर्भ में लागू किया जा सकता है, या इसके विपरीत। लेकिन आमतौर पर, परमाणु ओप हार्डवेयर द्वारा प्रदान किए जाते हैं, और उसके बाद म्यूटेक्स और अन्य सिंक्रनाइज़ेशन प्राइमेटिव ऑपरेटिंग सिस्टम द्वारा उनके ऊपर लागू होते हैं। ऐसा इसलिए है क्योंकि कुछ एल्गोरिदम हैं जिन्हें पूर्ण म्यूटेक्स की आवश्यकता नहीं होती है और जिसे "लॉकलेसली" के नाम से जाना जाता है, जिसका मतलब है कि कुछ अंतर-थ्रेड स्थिरता के लिए केवल परमाणु संचालन का उपयोग करना है।
यह सवाल का जवाब नहीं देता है। क्या होगा यदि दो धागे एक ही समय में "पढ़ और स्वैप" करें। फिर दोनों वापस आते हैं 0. – user1146657
@ user1146657: "लॉक एंड एक्सचेंज" ऑपरेशन का बिंदु यह है कि यह * परमाणु * है, और सीपीयू यह सुनिश्चित करता है कि किसी भी समय केवल एक धागा इसे कर सके। तो परिभाषा के अनुसार, दो धागे * एक ही समय में नहीं कर सकते हैं। सीपीयू विशेष रूप से इस उद्देश्य के लिए इस तरह से काम करने के लिए डिज़ाइन किया गया है। –