Heim > Backend-Entwicklung > Golang > Wird das Schließen des Golang-Kanals auch die Goroutine-Synchronisierung erzwingen?

Wird das Schließen des Golang-Kanals auch die Goroutine-Synchronisierung erzwingen?

WBOY
Freigeben: 2024-02-09 20:15:31
nach vorne
487 Leute haben es durchsucht

关闭 golang 通道是否也会强制 goroutine 同步?

PHP-Redakteur Xigua ist hier, um eine Frage zu Golang-Kanälen zu beantworten: Wird das Schließen von Golang-Kanälen auch die Goroutine-Synchronisierung erzwingen? Normalerweise erzwingt das Schließen des Kanals keine Synchronisierung der Goroutine, aber das Schließen des Kanals löst einen Lesevorgang auf dem Kanal aus, um einen Nullwert und einen booleschen Wert zurückzugeben. Wenn im Kanal ungelesene Daten vorhanden sind, gibt der Lesevorgang Daten und „true“ zurück. Wenn im Kanal keine ungelesenen Daten vorhanden sind, gibt der Lesevorgang „Null“ und „false“ zurück. Daher können Sie nach dem Schließen des Kanals feststellen, ob alle Daten im Kanal gelesen wurden, indem Sie den Kanal lesen.

Frageninhalt

Wie im Buch „Go Programming Language“ (Seite 226) angegeben:

Communication over an unbuffered channel causes the sending and receiving goroutines to synchronize. Because of this, unbuffered channels are sometimes called synchronous channels. When a value is sent on an unbuffered channel, the receipt of the value happens before the reawakening of the sending goroutine.
Nach dem Login kopieren

Wird das Gleiche passieren, wenn der Kanal geschlossen ist? Ich meine, erfolgt der Empfang des Schließens eines Kanals immer, bevor die Goroutine, die ihn gerade geschlossen hat, wieder aufwacht?

Ich erinnere mich, etwas dazu gelesen zu haben. Ich habe in Büchern gesucht, konnte es aber nicht finden.

Workaround

Das Schließen des Kanals zwingt die Goroutine nicht zur Synchronisierung, wie das Senden auf einem ungepufferten Kanal.

Go-SpeichermodellSpezifikation besagt:

Der Goroutine-Aufruf close() blockiert nicht das Warten darauf, dass eine andere Goroutine einen Nullwert empfängt.

Eine Goroutine, die einen Wert an einen ungepufferten Kanal sendet, blockiert, bis eine andere Goroutine den Wert empfängt.

Das obige ist der detaillierte Inhalt vonWird das Schließen des Golang-Kanals auch die Goroutine-Synchronisierung erzwingen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
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