Ich versuche, einige Berechnungen parallel zu machen. Das Programm ist so ausgelegt, dass jede Worker-Goroutine "Teile" eines gelösten Puzzles an die Controller-Routine zurücksendet, die darauf wartet, alles zu empfangen und zu assemblieren, das von den Worker-Routinen gesendet wurde.Wie schließe ich einen Kanal, auf dem mehrere Goroutines senden?
Was ist die Idomatik zum Schließen des Einzelkanals? Ich kann den Kanal nicht in jeder Goroutine aufrufen, weil ich dann möglicherweise einen geschlossenen Kanal senden könnte. Ebenso gibt es keine Möglichkeit vorher festzulegen, welche Goroutine als erstes beendet wird. Ist hier eine sync.WaitGroup notwendig?
Vielen Dank, das hat perfekt funktioniert für das, was ich brauchte. –
Ein Teil dieses Codes ist ein wenig ... seltsam. Insbesondere die Goroutine mit dem for/single-case-select akkumuliert die Ergebnisse und überschreibt eine Variable ohne Synchronisation. Einige kleinere Umordnungen und Dinge werden zuverlässiger/einfacher zu verstehen: http://play.golang.org/p/5bmlTbdIQa – Dustin