Ricerca…


Mutex Locking

Il blocco di Mutex in Go ti consente di assicurarti che solo una goroutine alla volta abbia un lucchetto:

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

L'utilizzo di un Mutex consente di evitare condizioni di competizione, modifiche simultanee e altri problemi associati a più routine simultanee che operano sulle stesse risorse. Si noti che Mutex.Unlock() può essere eseguito da qualsiasi routine, non solo dalla routine che ha ottenuto il blocco. Si noti inoltre che la chiamata a Mutex.Lock() non fallirà se un'altra routine mantiene il blocco; bloccherà fino a quando il blocco non verrà rilasciato.

Suggerimento: ogni volta che si passa una variabile Mutex a una funzione, passarla sempre come puntatore. Altrimenti viene fatta una copia della variabile, che sconfigge lo scopo del Mutex. Se stai usando una versione Go precedente (<1.7), il compilatore non ti avviserà di questo errore!



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow