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

Wie man mit Deadlocks in Golang umgeht

(*-*)浩
Freigeben: 2019-12-30 15:37:37
Original
2837 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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

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

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
		}
	}	
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage