हम दो प्रक्रियाओं पर विचार करते हैं, जिन्हें क्रमशः "निर्माता" और "उपभोक्ता" कहा जाता है। निर्माता एक चक्रीय प्रक्रिया है और हर बार जब यह अपने चक्र से गुजरता है तो यह जानकारी का एक निश्चित भाग उत्पन्न करता है, जिसे उपभोक्ता द्वारा संसाधित किया जाना चाहिए। उपभोक्ता भी एक चक्रीय प्रक्रिया है और हर बार जब वह अपने चक्र से गुजरता है तो वह सूचना के अगले टुकड़े को संसाधित कर सकता है, क्योंकि यह निर्माता द्वारा उत्पादित किया गया था। एक सरल उदाहरण एक कम्प्यूटेशनल प्रक्रिया द्वारा दिया गया है, जो एक छिद्रित कार्ड द्वारा छिद्रित किए जाने वाले छिद्रित कार्डों की छवियों को "सूचना के अंश" के रूप में उत्पन्न करता है, जो उपभोक्ता की भूमिका निभाता है।[1]
एक निर्माता आइटम बनाता है और उन्हें डेटा संरचना में संग्रहीत करता है, जबकि एक उपभोक्ता उस संरचना से आइटम हटाता है और उन्हें संसाधित करता है।
यदि खपत उत्पादन से अधिक है, तो बफर (डेटा संरचना) खाली हो जाता है, और उपभोक्ता के पास उपभोग करने के लिए कुछ भी नहीं होता है यदि खपत
समस्या का संदर्भीकरण
उत्पादन से कम है, तो बफर भर जाता है, और निर्माता अधिक आइटम नहीं जोड़ सकता है। यह एक क्लासिक समस्या है जिसे सीमित बफर कहा जाता है।
कार्यान्वयन जाओ
package main import ( "fmt" "os" "strconv" "sync" "time" ) type buffer struct { items []string mu sync.Mutex } func (buff *buffer) add(item string) { buff.mu.Lock() defer buff.mu.Unlock() if len(buff.items)सबसे पहले, हम
https://github.com/jcelsocosta/race_condition/blob/main/producerconsumer/buffer/producerconsumer.go संदर्भ
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3