Go Academy · पाठ

sync.Mutex और sync.RWMutex

लॉकिंग और पढ़ने-लिखने की लॉकिंग के प्रतिरूप

पाठ 1, कुल 4 में से13 चरण

sync.Mutex और sync.RWMutex, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

म्यूटेक्स क्यों

जब कई गोरूटीन परिवर्तनशील स्थिति साझा करती हैं, तो एक साथ पढ़ने और लिखने से डेटा-संघर्ष होते हैं। म्यूटेक्स पहुँच को क्रमबद्ध करता है, ताकि एक समय में केवल एक गोरूटीन महत्वपूर्ण खंड में प्रवेश करे।

sync.Mutex की मूल बातें

साझा स्थिति को पढ़ने या लिखने से पहले Lock करें; उसके बाद Unlock करें। फ़ंक्शन के अचानक विफल होने पर भी अनलॉक करना सुनिश्चित करने के लिए defer का उपयोग करें।

var mu sync.Mutex
var counter int

func inc() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

संरचना में म्यूटेक्स एम्बेड करना

म्यूटेक्स को उस संरचना में एम्बेड करें जिसकी वह सुरक्षा करता है। परंपरा के अनुसार, म्यूटेक्स को उन फ़ील्डों के ठीक ऊपर घोषित किया जाता है, जिनकी वह सुरक्षा करता है।

type SafeCounter struct {
    mu sync.Mutex
    v  map[string]int
}
func (c *SafeCounter) Inc(key string) {
    c.mu.Lock()
    defer c.mu.Unlock()
    c.v[key]++
}

म्यूटेक्स की प्रतिलिपि न बनाएँ

पहली बार उपयोग किए जाने के बाद म्यूटेक्स की प्रतिलिपि नहीं बनानी चाहिए। इसे संकेतक के रूप में पास करें या संकेतक के रूप में पास की गई संरचना में एम्बेड करें। go vet टूल प्रतिलिपियों का पता लगाता है।

sync.RWMutex

sync.RWMutex कई पाठकों को एक साथ पढ़ने देता है, लेकिन केवल एक लेखक को लिखने देता है। जब पढ़ने की क्रियाएँ अधिक और लिखने की क्रियाएँ कम हों, तब प्रवाह क्षमता बढ़ाने के लिए इसका उपयोग करें।

var rw sync.RWMutex
var data map[string]int

func read(k string) int {
    rw.RLock()
    defer rw.RUnlock()
    return data[k]
}
func write(k string, v int) {
    rw.Lock()
    defer rw.Unlock()
    data[k] = v
}

RLock बनाम Lock

RLock साझा पठन लॉक प्राप्त करता है; Lock विशिष्ट लेखन लॉक प्राप्त करता है। लंबित लेखन लॉक नए पठन लॉक को रोकता है, जिससे लेखकों को लगातार अवसर न मिलने की समस्या रुकती है।

TryLock (Go 1.18+)

mu.TryLock() लॉक को तभी प्राप्त करता है, जब वह वर्तमान में अनलॉक हो, और एक बूलियन मान लौटाता है। जब अवरुद्ध होना स्वीकार्य न हो, तब यह उपयोगी है।

if mu.TryLock() {
    defer mu.Unlock()
    // critical section
}

गतिरोध

गतिरोध तब होता है, जब गोरूटीन A के पास लॉक 1 हो और वह लॉक 2 की प्रतीक्षा कर रही हो, जबकि गोरूटीन B के पास लॉक 2 हो और वह लॉक 1 की प्रतीक्षा कर रही हो। लॉक हमेशा एक ही क्रम में प्राप्त करें और महत्वपूर्ण खंडों को छोटा रखें।

लॉक की सूक्ष्मता

मोटे स्तर का लॉक समझना आसान होता है, लेकिन इससे समवर्ती कार्य घटते हैं। सूक्ष्म स्तर पर लॉक लगाने से प्रवाह क्षमता बढ़ती है, लेकिन जटिलता और गतिरोध का जोखिम भी बढ़ता है। शुरुआत मोटे स्तर के लॉक से करें और प्रदर्शन-विश्लेषण में प्रतिस्पर्धा दिखाई देने पर उसे बेहतर बनाएँ।

म्यूटेक्स बनाम चैनल

कई पाठकों और लेखकों वाली साझा स्थिति की सुरक्षा के लिए म्यूटेक्स का उपयोग करें। गोरूटीनों के बीच डेटा का स्वामित्व स्थानांतरित करने के लिए चैनल का उपयोग करें। संचार के लिए चैनल, समन्वयन के लिए म्यूटेक्स।

sync.Locker इंटरफ़ेस

sync.Locker एक ऐसा इंटरफ़ेस है जिसमें Lock और Unlock होते हैं। म्यूटेक्स और रीड-राइट म्यूटेक्स दोनों इसे लागू करते हैं, इसलिए सहायक फ़ंक्शन इनमें से किसी भी प्रकार को स्वीकार कर सकते हैं।

त्वरित जाँच

आपको sync.Mutex के बजाय sync.RWMutex का उपयोग कब करना चाहिए?

पुनरावलोकन: Mutex और RWMutex

मुख्य बिंदु:

  • Mutex पहुँच को क्रमबद्ध करता है; हमेशा Unlock को defer करें
  • पहली बार उपयोग करने के बाद Mutex की प्रतिलिपि कभी न बनाएँ
  • RWMutex: कई पाठक OR एक लेखक
  • डेडलॉक से बचने के लिए लॉक हमेशा एकसमान क्रम में प्राप्त करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ Go सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “sync.Mutex और sync.RWMutex” पाठ निःशुल्क है?

हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “sync.Mutex और sync.RWMutex” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“sync.Mutex और sync.RWMutex” में मैं क्या सीखूँगा?

लॉकिंग और पढ़ने-लिखने की लॉकिंग के प्रतिरूप आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“sync.Mutex और sync.RWMutex” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. sync.Mutex और sync.RWMutex
  2. sync.WaitGroup
  3. sync.Once और sync.Map
  4. रेस डिटेक्टर और सुरक्षित प्रतिरूप
← Go Academy पर वापस जाएँ