Junior — Middle
Comment peut-on vérifier si le verrouillage des données a été effectué lors de l'utilisation de map avec un mutex?
sobes.tech IA
Réponse de l'IA
En Go, si vous utilisez un mutex pour protéger l'accès à une carte, il n'est pas possible de vérifier directement si le verrou a été effectué, car le sync.Mutex standard ne fournit pas de méthodes pour vérifier son état.
Cependant, vous pouvez :
- Utiliser
sync.RWMutexet concevoir soigneusement le code pour que les verrouillages soient évidents. - Dans les tests ou le débogage, ajouter des journaux avant et après l'appel à
Lock()etUnlock(). - Pour un contrôle plus avancé, utiliser
sync.Mutexdu paquetsyncavec des enveloppes qui enregistrent l'état du verrou (par exemple, un drapeau booléen), mais cela nécessite de la prudence.
Exemple avec journalisation :
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
fmt.Println("Verrouillage du mutex")
mu.Lock()
defer mu.Unlock()
fmt.Println("Mutex verrouillé")
m[key] = value
fmt.Println("Déverrouillage du mutex")
}
Ainsi, on peut s'assurer indirectement que le verrouillage se produit, mais il n'existe pas de moyens intégrés pour vérifier l'état du mutex.