Maison >développement back-end >Golang >Comment faire face à une impasse dans Golang

Comment faire face à une impasse dans Golang

(*-*)浩
(*-*)浩original
2019-12-30 15:37:372845parcourir

Comment faire face à une impasse dans Golang

Deadlock

Deadlock signifie que lors de l'exécution de deux ou plusieurs coroutines, en raison d'une compétition pour les ressources ou l'une de l'autre Un phénomène de blocage causés par la communication. Sans force extérieure, ils ne pourront pas avancer. (Apprentissage recommandé : go)

Interblocages courants

Scénario 1 : Un canal est lu et écrit dans un processus go

func main() {
	c:=make(chan int)
	c<-88
	<-c
}

Scénario 2 : Le canal est utilisé avant le démarrage du processus go

func main() {
	c:=make(chan int)
	c<-88
	go func() {
		<-c
	}()
}

Scénario 3 : Le canal 2 est appelé dans le canal 1 et le canal 1 est appelé dans le canal 2

func main() {
	c1,c2:=make(chan int),make(chan int)
	go func() {
		for  {
			select{
				case <-c1:
					c2<-10
			}
		}
	}()
	for  {
		select{
		case <-c2:
			c1<-10
		}
	}	
}

Des blocages se produisent dans de nombreuses situations, mais ils sont tous causés par un conflit pour les ressources et la communication de données.

La façon de résoudre une impasse est de verrouiller.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn