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

निर्माता/उपभोक्ता

2024-07-31 को प्रकाशित
ब्राउज़ करें:498

परिभाषा

हम दो प्रक्रियाओं पर विचार करते हैं, जिन्हें क्रमशः "निर्माता" और "उपभोक्ता" कहा जाता है। निर्माता एक चक्रीय प्रक्रिया है और हर बार जब यह अपने चक्र से गुजरता है तो यह जानकारी का एक निश्चित भाग उत्पन्न करता है, जिसे उपभोक्ता द्वारा संसाधित किया जाना चाहिए। उपभोक्ता भी एक चक्रीय प्रक्रिया है और हर बार जब वह अपने चक्र से गुजरता है तो वह सूचना के अगले टुकड़े को संसाधित कर सकता है, क्योंकि यह निर्माता द्वारा उत्पादित किया गया था। एक सरल उदाहरण एक कम्प्यूटेशनल प्रक्रिया द्वारा दिया गया है, जो एक छिद्रित कार्ड द्वारा छिद्रित किए जाने वाले छिद्रित कार्डों की छवियों को "सूचना के अंश" के रूप में उत्पन्न करता है, जो उपभोक्ता की भूमिका निभाता है।[1]

Producer/Consumer (Produtor/Consumidor)

स्पष्टीकरण

एक निर्माता आइटम बनाता है और उन्हें डेटा संरचना में संग्रहीत करता है, जबकि एक उपभोक्ता उस संरचना से आइटम हटाता है और उन्हें संसाधित करता है।

यदि खपत उत्पादन से अधिक है, तो बफर (डेटा संरचना) खाली हो जाता है, और उपभोक्ता के पास उपभोग करने के लिए कुछ भी नहीं होता है यदि खपत
उत्पादन से कम है, तो बफर भर जाता है, और निर्माता अधिक आइटम नहीं जोड़ सकता है। यह एक क्लासिक समस्या है जिसे सीमित बफर कहा जाता है।

समस्या का संदर्भीकरण

मान लीजिए कि हमारे पास एक निर्माता है जो बफ़र में एक ईमेल प्रकाशित करता है, और एक उपभोक्ता है जो बफ़र से ईमेल का उपभोग करता है और एक संदेश प्रदर्शित करता है जिसमें कहा गया है कि एक ईमेल प्रदान किए गए ईमेल के लिए नए एक्सेस पासवर्ड के साथ भेजा गया था।

कार्यान्वयन जाओ

पैकेज मुख्य आयात ( "एफएमटी" "आप" "strconv" "साथ-साथ करना" "टीम" ) बफ़र संरचना टाइप करें { आइटम[]स्ट्रिंग म्यू सिंक.म्यूटेक्स } func (बफ़ *बफ़र) जोड़ें(आइटम स्ट्रिंग) { बफ़.मु.लॉक() स्थगित करें buff.mu.Unlock() यदि लेन(बफ़.आइटम)
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) 

सबसे पहले, हम
    buffer
  • नामक एक संरचना बनाते हैं, जिसमें समवर्ती पहुंच को प्रबंधित करने के लिए आइटम नामक स्ट्रिंग्स की एक सरणी होती है और एक म्यूटेक्स-जैसा नियंत्रण तंत्र होता है, जिसे म्यू कहा जाता है। हमारे पास दो कार्य हैं: एक को ऐड कहा जाता है, जो मूल रूप से बफर में एक आइटम जोड़ता है, जब तक कि जगह उपलब्ध है, क्योंकि बफर क्षमता केवल 5 आइटम है; और दूसरा कॉल प्राप्त करता है, जो, यदि बफ़र में आइटम हैं, तो पहला तत्व लौटाता है और उस तत्व को बफ़र से हटा देता है।
  • निर्माता
  • मूल रूप से लूप से इंडेक्स लेता है और इसे str नामक स्ट्रिंग में जोड़ता है, जिसमें इंडेक्स और एक डमी ईमेल डोमेन होता है, और इसे बफर में जोड़ता है। देरी का अनुकरण करने के लिए एक समय अंतराल जोड़ा गया है।
  • उपभोक्ता
  • बफ़र से एक आइटम का अनुरोध करता है, यदि उसके पास कम से कम एक आइटम है। इसके बाद उपभोक्ता स्क्रीन पर एक संदेश प्रदर्शित करता है जिसमें बताया जाता है कि बफर में प्रकाशित आइटम के लिए नए एक्सेस पासवर्ड के साथ एक ईमेल भेजा गया था।
कोड लिंक:

https://github.com/jcelsocosta/race_condition/blob/main/producerconsumer/buffer/producerconsumer.go संदर्भ

https://www.cs.utexas.edu/~EWD/transscriptions/EWD01xx/EWD123.html#4.1। सामान्य सेमाफोर के विशिष्ट उपयोग।
  1. ग्रन्थसूची

https://www.cin.ufpe.br/~cagf/if677/2015-2/slides/08_Concorrencia (जॉर्ज).pdf

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/celso/producerconsumer-produtorconsumidor-1jok?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3