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

Sync.WaitGroup के साथ गो कॉन्करेंसी में गतिरोध को कैसे रोकें?

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

How to Prevent Deadlock in Go Concurrency with sync.WaitGroup?

गोरआउटिंस गतिरोध को हल करना

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

त्रुटि आपके उत्पादकों और उपभोक्ता के व्यवहार के बीच बेमेल के कारण होती है। आपके निर्माता, निर्माता फ़ंक्शन में कार्यान्वित, सीमित अवधि के लिए चैनल ch पर मान भेज रहे हैं। हालाँकि, आपके मुख्य कार्य में मौजूद उपभोक्ता, ch से मान प्राप्त करने का प्रयास करते हुए अनिश्चित काल तक चलता है।

इस गतिरोध को हल करने के लिए, आपको यह सुनिश्चित करने की आवश्यकता है कि उपभोक्ता उत्पादकों के पूरा होने का सम्मान करता है। इसका मतलब यह है कि जब उत्पादकों ने मूल्य भेजना समाप्त कर दिया है तो उपभोक्ता को स्वचालित रूप से समाप्त कर देना चाहिए।

एक प्रभावी तरीका उत्पादकों के समन्वय के लिए सिंक.वेटग्रुप का उपयोग करना है। प्रतीक्षा समूह आपको निर्माताओं की प्रगति को ट्रैक करने और चैनल बंद करने से पहले उनके कार्यों को पूरा करने की प्रतीक्षा करने की अनुमति देता है। यहां आपके कोड का एक उन्नत संस्करण है:

func main() {
    var wg sync.WaitGroup
    ch := make(chan int)

    wg.Add(1)
    go producer(ch, 100*time.Millisecond, 2, &wg)

    wg.Add(1)
    go producer(ch, 200*time.Millisecond, 5, &wg)

    // Start a goroutine to close the channel when all producers are done
    go func() {
        wg.Wait()
        close(ch)
    }()

    // Use a for range loop to receive values from the channel
    for v := range ch {
        fmt.Println(v)
    }
}

इस अद्यतन कोड में, सक्रिय उत्पादकों की संख्या पर नज़र रखने के लिए सिंक.वेटग्रुप का उपयोग किया जाता है। जब निर्माता मान भेजना समाप्त कर लेते हैं तो प्रतीक्षा समूह को कम करने के लिए wg.Done() को कॉल करते हैं। मुख्य गोरोइन सभी निर्माताओं द्वारा wg.Wait() का उपयोग समाप्त करने की प्रतीक्षा करता है, और फिर ch चैनल बंद कर देता है।

सिंक.WaitGroup का उपयोग करके, आप एक समन्वय तंत्र स्थापित करते हैं जो आपके उपभोक्ता को पूर्णता स्थिति का सम्मान करने की अनुमति देता है उत्पादकों की, गतिरोध त्रुटि को प्रभावी ढंग से हल करना।

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

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

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

Copyright© 2022 湘ICP备2022001581号-3