Wie kann ich die Ausnahme eines Channel-Deadlocks abfangen?

7

Ich lerne Go und arbeite an dieser Lektion von den GoTours. Hier ist, was ich bisher habe.

%Vor%

Wie Sie sehen, versuche ich, meine Walk-Funktion zu testen, indem ich die Werte ausdrücke, die ich in einen Kanal geschrieben habe. Ich erhalte jedoch den folgenden Fehler.

%Vor%

Dieser Fehler sollte erwartet werden, denke ich, weil ich nie close den Kanal habe. Aber gibt es einen Weg, wie ich diesen Deadlock-Fehler "fangen" und programmatisch damit umgehen könnte?

    
dangerChihuahua007 28.12.2012, 20:29
quelle

3 Antworten

6

Deadlock ist ähnlich einer Null-Zeiger-Deferenz, da es einen BUG in Ihrem Programm darstellt. Diese Fehlerklasse ist normalerweise aus diesem Grund nicht wiederherstellbar.

Wie bereits erwähnt, ist das Problem hier, dass du deinen Kanal "(myChan) schließen" musst. Wenn Sie dies nicht für die For-Range-Schleife tun, wird die Schleife für immer auf das nächste Element warten.

Sie können etwas wie folgt ausprobieren:

%Vor%

Wenn Sie den Baum parallel durchlaufen möchten, müssen Sie weitere Änderungen vornehmen:

%Vor%     
voidlogic 30.12.2012, 00:04
quelle
7

Dieser Deadlock, weil das range -Konstrukt iteriert, bis der Kanal geschlossen ist. Ссылка

Hier müssen Sie entweder den Kanal schließen, wenn der Baum vollständig erkundet ist, oder ein anderes Konstrukt verwenden.

In diesem Beispiel wissen Sie, dass die Bäume die Größe 10 haben. Sie können also einfach eine for-Schleife von 1 bis 10 ausführen und bei jeder Iteration einmal aus dem Kanal lesen.

    
lbonn 29.12.2012 04:39
quelle
5

Nein, Sie können nicht von einem Deadlock wiederherstellen.

    
zzzz 28.12.2012 21:08
quelle

Tags und Links