Go
म्युटेक्स
खोज…
म्यूटेक्स लॉकिंग
गो म्यूटेक्स लॉकिंग आपको यह सुनिश्चित करने की अनुमति देता है कि एक समय में केवल एक गोरोइन में एक लॉक है:
import "sync"
func mutexTest() {
lock := sync.Mutex{}
go func(m *sync.Mutex) {
m.Lock()
defer m.Unlock() // Automatically unlock when this function returns
// Do some things
}(&lock)
lock.Lock()
// Do some other things
lock.Unlock()
}
एक Mutex
का उपयोग करने से आप एक ही संसाधनों पर संचालित कई समवर्ती दिनचर्या के साथ दौड़ की स्थिति, समवर्ती संशोधनों, और अन्य मुद्दों से बचने की अनुमति देते हैं। ध्यान दें कि Mutex.Unlock()
किसी भी रूटीन द्वारा निष्पादित किया जा सकता है, न कि केवल रूटीन जिसे लॉक मिला है। यह भी ध्यान दें कि Mutex.Lock()
को कॉल करें। Mutex.Lock()
एक और Mutex.Lock()
लॉक रखने पर विफल नहीं होगा; यह तब तक ब्लॉक रहेगा जब तक ताला जारी नहीं किया जाता है।
युक्ति: जब भी आप किसी फ़ंक्शन के लिए एक म्यूटेक्स चर पास कर रहे हैं, तो इसे हमेशा एक पॉइंटर के रूप में पास करें। अन्यथा एक प्रति आपके चर से बनती है, जो म्यूटेक्स के उद्देश्य को हरा देती है। यदि आप पुराने गो संस्करण (<1.7) का उपयोग कर रहे हैं, तो संकलक आपको इस गलती के बारे में चेतावनी नहीं देगा!