Maison > Article > développement back-end > Qu’est-ce que l’impasse dans Golang ? Comment l'éviter ?
1. Qu’est-ce qu’une impasse ?
En programmation simultanée, une impasse se produit lorsque deux ou plusieurs processus (threads) attendent que les ressources de chacun soient libérées. Pour faire simple, chaque processus occupe une partie des ressources et doit attendre que l'autre partie libère les ressources pour accomplir ses propres tâches, mais l'autre partie fait de même. Cela provoquera une boucle d'attente infinie, ce qui entraînera une boucle d'attente infinie. conduire à l’effondrement de tout le système.
2. Golang implémente le blocage
golang fournit le package de synchronisation pour prendre en charge les opérations simultanées, dont Mutex est l'un des types de verrous courants dans Golang. Prenons Mutex comme exemple pour démontrer la mise en œuvre de l'impasse de Golang.
Exemple de code :
package main import ( "sync" ) var mu sync.Mutex func main() { mu.Lock() go func() { mu.Lock() }() mu.Unlock() }
Dans ce code, nous créons une variable de type Mutex mu. Tout d'abord, nous appelons la méthode Lock de mu, acquérons le verrou mutex et entrons dans la section critique. Ensuite, nous avons créé un processus go, dans lequel nous avons essayé d'obtenir à nouveau la méthode Lock de mu. Enfin, nous libérons le verrou mu mutex.
Si nous supprimons l'instruction mu.Unlock() dans le code ci-dessus, alors l'ensemble du programme sera bloqué. Parce que dans le processus go, il attendra que le processus principal libère le verrou avant de pouvoir acquérir le verrou. Cependant, le processus principal ne peut pas continuer à s'exécuter car le verrou n'est pas libéré. De cette façon, l’ensemble du programme restera là et deviendra un processus zombie jusqu’à ce que le système soit arrêté de force.
3. Comment éviter une impasse ?
Lorsque plusieurs processus (threads) partagent les mêmes ressources, un blocage est susceptible de se produire. Alors, comment éviter une impasse ? Vous pouvez vous référer aux points suivants :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!