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

मेरे गोरआउटाइन का मूल्य दूसरों को क्यों दिखाई नहीं देता?

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

Why Is My Goroutine\'s Value Not Visible to Others?

क्या ऐसा इसलिए है क्योंकि गो कंपाइलर ने कोड को अनुकूलित किया है?

समस्या गो कंपाइलर द्वारा अनुकूलन नहीं है, बल्कि सिंक्रनाइज़ेशन की कमी है। i को दिए गए असाइनमेंट के बाद कोई सिंक्रोनाइज़ेशन इवेंट नहीं होता है, इसलिए किसी अन्य गोरोइन द्वारा देखे जाने की गारंटी नहीं है। वास्तव में, एक आक्रामक कंपाइलर पूरे i स्टेटमेंट को हटा सकता है। गोरोइन को एक अलग गोरोइन में एक ही वेरिएबल पर लिखने से उत्पन्न मूल्यों का निरीक्षण करने की गारंटी दी जा सकती है।

एक्सेस को क्रमबद्ध करने के लिए, चैनल संचालन या अन्य सिंक्रनाइज़ेशन के साथ डेटा की सुरक्षा करें आदिम जैसे कि सिंक और सिंक/परमाणु पैकेज में।यदि आपको अपने प्रोग्राम के व्यवहार को समझने के लिए इस दस्तावेज़ के बाकी हिस्सों को पढ़ना होगा, तो आप बहुत चालाक हो रहे हैं। चतुर मत बनो।

सिंक्रनाइज़ेशन

निम्नलिखित उदाहरण में, किसी भी सिंक्रोनाइज़ेशन ईवेंट के बाद ए को असाइनमेंट नहीं किया जाता है, इसलिए इसे देखे जाने की गारंटी नहीं है किसी अन्य गोरोइन द्वारा। वास्तव में, एक आक्रामक कंपाइलर पूरे गो स्टेटमेंट को हटा सकता है।

var a string फ़ंक हैलो() { जाओ func() { a = "हैलो" }() प्रिंट(ए) }

निम्न उदाहरण दिखाता है कि सिंक.म्यूटेक्स का उपयोग करके i तक पहुंच को क्रमबद्ध कैसे किया जाए।

पैकेज मुख्य

आयात (
    "साथ-साथ करना"
    "समय"
)

func मुख्य() {
    एमएक्स := नया(सिंक.म्यूटेक्स)
    मैं := 1
    जाओ func() {
        के लिए {
            एमएक्स.लॉक()
            मैं  
            एमएक्स.अनलॉक()
        }
    }()
    
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3