गो में बफर्ड लॉकिंग पैटर्न
गो में, एक बफर्ड चैनल संचार को तब तक अवरुद्ध किए बिना जारी रखने की अनुमति देता है जब तक कि उसका बफर भर न जाए। हालाँकि, क्या बफरिंग लॉक के लिए एक समान पैटर्न है जो विशिष्ट संख्या में ग्राहकों तक संसाधन पहुंच को सीमित करता है?
संसाधन तक समवर्ती पहुंच को प्रबंधित करने के लिए आदिम सेमाफोर है। एक सेमाफोर को बफ़र किए गए चैनल का उपयोग करके आसानी से कार्यान्वित किया जा सकता है। func f() { // ताला पकड़ो. यदि f के 4 अन्य समवर्ती आह्वान चल रहे हैं तो ब्लॉक हो जाता है। सेमाफोर
इस उदाहरण में, आकार 4 के बफर वाला एक सेमाफोर सेमाफोर का उपयोग करके बनाया गया है:= मेक(चान स्ट्रक्चर{}, 4)। एफ() फ़ंक्शन चैनल पर एक खाली संरचना भेजकर लॉक प्राप्त करने का प्रयास करता है। यदि चैनल बफ़र भरा हुआ है (यानी, f() के 4 समवर्ती उदाहरण पहले से ही चल रहे हैं), तो सेमफोर
var semaphore = make(chan struct{}, 4) // allow four concurrent users func f() { // Grab the lock. Blocks if 4 other concurrent invocations of f are running. semaphoreयह पैटर्न संभावित संसाधन विवाद के मुद्दों को रोकते हुए, एक विशिष्ट संख्या में समवर्ती ग्राहकों के लिए साझा संसाधन तक पहुंच को प्रतिबंधित करने का एक सुविधाजनक तरीका प्रदान करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3