परमाणु संचालन: गो के लिए LoadInt32/StoreInt32 को समझना
समवर्ती प्रोग्रामिंग के लिए परमाणु संचालन महत्वपूर्ण हैं, यह सुनिश्चित करना कि चर को कई के बीच सुरक्षित रूप से साझा किया जा सकता है goroutines. गो इस उद्देश्य के लिए सिंक/परमाणु प्रदान करता है, लेकिन LoadInt32 और StoreInt32 के बीच अंतर तुरंत स्पष्ट नहीं हो सकता है।
समवर्ती कोड में साझा चर का उपयोग करते समय, निम्नलिखित परिदृश्यों पर विचार करना महत्वपूर्ण है:
import "sync/atomic"
var sharedA int64
var sharedB *int64
// Concurrent code
tmpVarA := sharedA
tmpVarB := *sharedB
इस उदाहरण में, shareA और shareB दोनों को एक साथ एक्सेस किया जाता है। परमाणु संचालन का उपयोग किए बिना, tmpVarA और tmpVarB के लिए असंगत मान रखना संभव है। ऐसा इसलिए है क्योंकि प्रत्येक गोरोइन के लिए सीपीयू का निर्देश क्रम भिन्न हो सकता है, जिसके परिणामस्वरूप अप्रत्याशित परिणाम हो सकते हैं।
इस समस्या को हल करने के लिए, गो सिंक/परमाणु पैकेज प्रदान करता है। यहां बताया गया है कि इसे पिछले उदाहरण में कैसे शामिल किया जा सकता है:
tmpVarA := atomic.LoadInt64(&sharedA)
tmpVarB := atomic.LoadInt64(sharedB)
LoadInt64 फ़ंक्शन परमाणु रूप से साझाए और साझाबी से मान को क्रमशः tmpVarA और tmpVarB में लोड करता है। यह सुनिश्चित करता है कि मान हमेशा परमाणु रूप से प्राप्त किए जाते हैं, गोरोइन्स में उनकी स्थिरता को संरक्षित करते हुए।
संक्षेप में, समवर्ती गो कार्यक्रमों में साझा चर तक सिंक्रनाइज़ पहुंच के लिए LoadInt32/StoreInt32 जैसे परमाणु संचालन आवश्यक हैं। वे गारंटी देते हैं कि चर को सुसंगत और पूर्वानुमानित तरीके से पढ़ा और लिखा जाता है, जिससे दौड़ की स्थिति और डेटा भ्रष्टाचार को रोका जा सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3