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

GoLang में बफ़र किए गए चैनल पर रेंज करते समय गतिरोध से कैसे बचें?

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

How to Avoid Deadlock When Ranging Over a Buffered Channel in GoLang?

GoLang में गतिरोध: बफर्ड चैनल पर रेंज क्यों?

GoLang में बफर्ड चैनलों का उपयोग करते समय, गतिरोध की स्थिति पैदा करने से बचना महत्वपूर्ण है . हाल के एक मुद्दे ने सभी गोरआउट्स पूरे होने के बाद एक बफ़र्ड चैनल पर रेंज करने का प्रयास करते समय आने वाले गतिरोध के बारे में चिंता जताई। चैनल को. हालाँकि, गतिरोध इसलिए होता है क्योंकि:

चैनल का आकार बहुत छोटा है, जिसके परिणामस्वरूप अवरुद्ध गोरोइन पूरे चैनल पर लिखने की प्रतीक्षा कर रहे हैं।
  • चैनल पर संचालन की सीमा अनिश्चित काल तक बनी रहती है तत्वों के आने की प्रतीक्षा की जा रही है, जबकि लिखने के लिए कोई गोरआउट्स नहीं बचा है।
समाधान 1: चैनल का आकार बढ़ाएं और उसके बाद बंद करें समापन

गतिरोध को हल करने के लिए, चैनल का आकार बढ़ाया जा सकता है और सभी गोरोइन पूरा होने के बाद बंद किया जा सकता है:

ch := make(chan []int, 5 ) ... wg.रुको() बंद करें(ch)
ch := make(chan []int, 5)
...
wg.Wait()
close(ch)

समाधान 2: प्रिंटिंग रूटीन के भीतर से सिग्नल समापन

वास्तविक पाइपलाइनिंग को सक्षम करने के लिए, प्रिंटिंग के भीतर Done() फ़ंक्शन को कॉल किया जा सकता है दिनचर्या:

func main() { ch := बनाओ(चान []int, 4) ... जाओ func() { सी के लिए := रेंज सीएच { fmt.Printf('c %v\n है', c) wg.हो गया() } }() ... }
func main() {
    ch := make(chan []int, 4)
    ...
    go func() {
        for c := range ch {
            fmt.Printf("c is %v\n", c)
            wg.Done()
        }
    }()
    ...
}
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3