"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > `sync.Once` में सामान्य असाइनमेंट की तुलना में `atomic.StoreUint32` को प्राथमिकता क्यों दी जाती है?

`sync.Once` में सामान्य असाइनमेंट की तुलना में `atomic.StoreUint32` को प्राथमिकता क्यों दी जाती है?

2024-11-12 को प्रकाशित
ब्राउज़ करें:744

Why is `atomic.StoreUint32` Preferred over Normal Assignment in `sync.Once`?

Atomic.StoreUint32 बनाम सिंक में सामान्य असाइनमेंट। एक बार

गो के सिंक के संदर्भ में। एक बार, परमाणु.StoreUint32 ऑपरेशन है किए गए फ़ील्ड को 1 पर सेट करने के लिए सामान्य असाइनमेंट पर प्राथमिकता दी जाती है। यह प्राथमिकता विशिष्ट शब्दार्थ और प्रदान की गई गारंटी से उत्पन्न होती है sync.Once.

Sync.Once की गारंटी

Sync.Once सुनिश्चित करता है कि Do विधि में पारित फ़ंक्शन केवल एक बार निष्पादित होता है। इस गारंटी को बनाए रखने के लिए, किया गया फ़ील्ड, जो इंगित करता है कि क्या फ़ंक्शन पहले ही निष्पादित हो चुका है, को परमाणु रूप से अद्यतन किया जाना चाहिए।

सामान्य असाइनमेंट की सीमाएं

यदि एक सामान्य असाइनमेंट उपयोग किया गया (o.done = 1 के बराबर), कमजोर मेमोरी मॉडल वाले आर्किटेक्चर पर इस गारंटी का आश्वासन नहीं दिया जा सका। ऐसे आर्किटेक्चर पर, एक गोरोइन द्वारा किए गए परिवर्तन तुरंत अन्य गोरोइन को दिखाई नहीं दे सकते हैं, जिससे केवल एक बार निष्पादन की आवश्यकता के उल्लंघन में फ़ंक्शन को लागू करने वाले कई गोरोइन हो सकते हैं।

Atomic.StoreUint32 ऑपरेशन

atomic.StoreUint32 एक परमाणु ऑपरेशन है जो सभी में लिखने की दृश्यता सुनिश्चित करता है goroutines. किए गए फ़ील्ड को सेट करने के लिए इसका उपयोग करके, सिंक.वन्स यह सुनिश्चित करता है कि फ़ंक्शन को पूर्ण के रूप में चिह्नित करने से पहले सभी गोरोइन फ़ंक्शन निष्पादन के प्रभाव का निरीक्षण करते हैं।

परमाणु संचालन का दायरा

यह ध्यान रखना महत्वपूर्ण है कि सिंक.वन्स में उपयोग किए जाने वाले परमाणु संचालन मुख्य रूप से तेज़ पथ को अनुकूलित करने के लिए होते हैं। o.m.Lock() और o.m.Unlock() के माध्यम से सिंक्रनाइज़ किए गए म्यूटेक्स के बाहर किए गए ध्वज तक पहुंच केवल सुरक्षित होनी चाहिए, सख्ती से आदेशित नहीं। यह अनुकूलन शुद्धता का त्याग किए बिना गर्म पथों पर कुशल निष्पादन की अनुमति देता है। एक डेटा रेस. नतीजतन, सही दृश्यता सुनिश्चित करने के लिए फ़ील्ड को पढ़ने के लिएatomic.LoadUint32 का उपयोग किया जाता है। इसी तरह, परमाणु.StoreUint32 को फ़ंक्शन निष्पादन के बाद फ़ील्ड को अपडेट करने के लिए नियोजित किया जाता है, यह गारंटी देता है कि अन्य गोरूटाइन किए गए ध्वज को सेट करने से पहले फ़ंक्शन के पूरा होने का निरीक्षण करते हैं।

संक्षेप में, परमाणु.StoreUint32 को सामान्य असाइनमेंट पर प्राथमिकता दी जाती है सिंक में। एक बार यह गारंटी बनाए रखने के लिए कि फ़ंक्शन केवल एक बार निष्पादित होता है, यहां तक ​​कि कमजोर मेमोरी मॉडल वाले आर्किटेक्चर पर भी, परमाणु दृश्यता के कारण यह प्रदान करता है। यह अनुकूलन तेज़ पथ पर प्रदर्शन को बढ़ाने के लिए लागू किया जाता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3