Wie überprüfe ich, ob ein Kanal geschlossen ist, ohne ihn zu lesen?
Diese Frage stellt sich bei der Arbeit mit Kanälen in Go, wo es wichtig ist Bestimmen Sie die Kanalschließung ohne Blockierung. Im bereitgestellten Codebeispiel soll ein Kanal aus einem Slice entfernt werden, wenn der entsprechende Worker beendet wird.
Das Problem
Schließen eines Kanals in worker() while Der Versuch, im Controller() darauf zu schreiben, löst eine Panik aus. Die Verwendung eines Mutex zum Schutz dieses Vorgangs führt zu einem Deadlock. Das Zuweisen eines größeren Puffers zum Kanal ist ebenfalls keine praktikable Lösung.
Vorgeschlagene Lösung
Um dieses Problem zu beheben, wird empfohlen, dass worker() den Kanal schließt, wenn es wird beendet. Der Controller() kann dann nach geschlossenen Kanälen suchen und das Schreiben auf diese überspringen. Derzeit gibt es jedoch keine integrierte Funktion in Go, um die Kanalschließung zu überprüfen, ohne daraus zu lesen.
Mögliche Problemumgehungen
Das obige ist der detaillierte Inhalt vonWie kann ich überprüfen, ob ein Go-Kanal geschlossen ist, ohne ihn zu lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!