Sök…


Mutex-låsning

Med Mutex-låsning i Go kan du se till att bara en goroutin i taget har ett lås:

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

Med hjälp av en Mutex kan du undvika rasförhållanden, samtidiga ändringar och andra problem relaterade till flera samtidiga rutiner som arbetar på samma resurser. Observera att Mutex.Unlock() kan köras med valfri rutin, inte bara den rutin som fick låset. Observera också att samtalet till Mutex.Lock() kommer att misslyckas om en annan rutin har låset; det kommer att blockeras tills låset lossas.

Tips: När du skickar en Mutex-variabel till en funktion ska du alltid skicka den som en pekare. Annars görs en kopia av din variabel, som besegrar syftet med Mutex. Om du använder en äldre Go-version (<1.7) kommer kompilatorn inte att varna dig om detta misstag!



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow