Zoeken…


Mutex-vergrendeling

Met Mutex-vergrendeling in Go kunt u ervoor zorgen dat slechts één goroutine tegelijk een vergrendeling heeft:

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()
}

Met behulp van een Mutex kunt u race-omstandigheden, gelijktijdige wijzigingen en andere problemen in verband met meerdere gelijktijdige routines die op dezelfde bronnen werken vermijden. Merk op dat Mutex.Unlock() door elke routine kan worden uitgevoerd, niet alleen de routine die het slot kreeg. Merk ook op dat de aanroep van Mutex.Lock() niet zal mislukken als een andere routine het slot vasthoudt; het zal blokkeren totdat het slot wordt vrijgegeven.

Tip: wanneer u een Mutex-variabele aan een functie doorgeeft, geeft u deze altijd als een aanwijzer door. Anders wordt een kopie gemaakt van uw variabele, die het doel van de Mutex verslaat. Als u een oudere Go-versie (<1.7) gebruikt, waarschuwt de compiler u niet voor deze fout!



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow