Suche…


Mutex-Verriegelung

Mutex Locking in Go ermöglicht Ihnen sicherzustellen, dass immer nur eine Goroutine gesperrt ist:

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

Durch die Verwendung eines Mutex können Sie Race-Bedingungen, gleichzeitige Änderungen und andere Probleme im Zusammenhang mit mehreren gleichzeitigen Routinen vermeiden, die auf denselben Ressourcen ausgeführt werden. Beachten Sie, dass Mutex.Unlock() von jeder Routine ausgeführt werden kann, nicht nur von der Routine, die die Sperre erhalten hat. Beachten Sie auch, dass der Aufruf von Mutex.Lock() nicht fehlschlägt, wenn eine andere Routine die Sperre hält. es wird blockiert, bis die Sperre freigegeben wird.

Tipp: Wenn Sie eine Mutex-Variable an eine Funktion übergeben, übergeben Sie sie immer als Zeiger. Andernfalls wird eine Kopie Ihrer Variablen erstellt, die den Zweck des Mutex vereitelt. Wenn Sie eine ältere Go-Version (<1.7) verwenden, warnt Sie der Compiler nicht vor diesem Fehler!



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow