Go Verrouillage mutex


Exemple

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!