Próbuję wykonać pewne obliczenia równolegle. Program jest tak skonstruowany, aby każdy pracownik goroutine wysyłał "kawałki" rozwiązanej łamigłówki do kontrolera goroutine, który czeka na otrzymanie i złożenie wszystkiego, co zostało wysłane z procedur roboczych.Jak mogę zamknąć kanał wysyłany przez wiele goroutinów?
Co to jest idomatic do zamykania pojedynczego kanału? Nie mogę zadzwonić blisko na kanał w każdej goroutine, ponieważ wtedy mógłbym wysłać zamknięty kanał. Podobnie, nie ma sposobu, aby z góry określić, który gorynt będzie kończył jako pierwszy. Czy konieczna jest tutaj synchronizacja.WaitGroup?
Dziękuję, to działało idealnie na to, czego potrzebowałem. –
Niektóre z tych kodów są trochę ... dziwne. W szczególności, goroutine z wyborem for/single-case gromadzi wyniki i nadpisuje zmienną bez synchronizacji. Niektóre drobne rearanżacje i rzeczy stają się bardziej niezawodne/łatwiejsze do zrozumienia: http://play.golang.org/p/5bmlTbdIQa – Dustin