Heim  >  Artikel  >  Backend-Entwicklung  >  Wie man mit Deadlocks in Golang umgeht

Wie man mit Deadlocks in Golang umgeht

(*-*)浩
(*-*)浩Original
2019-12-30 15:37:372809Durchsuche

Wie man mit Deadlocks in Golang umgeht

Deadlock

Deadlock bedeutet, dass während der Ausführung von zwei oder mehr Coroutinen ein Blockierungsphänomen aufgrund des Wettbewerbs um Ressourcen oder aufgrund eines anderen auftritt Ohne äußere Kraft können sie nicht vorankommen. (Empfohlenes Lernen: go)

Häufige Deadlocks

Szenario 1: Ein Kanal wird in einem Go-Prozess gelesen und geschrieben

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

Szenario 2: Der Kanal wird verwendet, bevor der Go-Prozess gestartet wird

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

Szenario 3: Kanal 2 wird in Kanal 1 und Kanal aufgerufen 1 wird in Kanal 2 aufgerufen

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

Deadlocks treten in vielen Situationen auf, aber sie werden alle durch Konflikte um Ressourcen und Datenkommunikation verursacht.

Der Weg, Deadlocks zu lösen, ist das Sperren.

Das obige ist der detaillierte Inhalt vonWie man mit Deadlocks in Golang umgeht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn