Recherche…
Verrouillage mutex
Le verrouillage mutex dans Go vous permet de vous assurer qu'un seul goroutine à la fois possède un verrou:
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'utilisation d'un Mutex
vous permet d'éviter les conditions de concurrence, les modifications simultanées et d'autres problèmes associés à plusieurs routines simultanées fonctionnant sur les mêmes ressources. Notez que Mutex.Unlock()
peut être exécuté par n'importe quelle routine, pas seulement la routine qui a obtenu le verrou. Notez également que l'appel à Mutex.Lock()
n'échouera pas si une autre routine contient le verrou; il bloquera jusqu'à ce que le verrou soit libéré.
Astuce: chaque fois que vous transmettez une variable Mutex à une fonction, transmettez-la toujours en tant que pointeur. Sinon, une copie est faite de votre variable, ce qui va à l'encontre du but du Mutex. Si vous utilisez une ancienne version de Go (<1.7), le compilateur ne vous avertira pas de cette erreur!