我收到「致命的錯誤:所有goroutines睡着了 - 死鎖! 」出於某種原因在下面的代碼。我使用應該是非阻塞的緩衝通道。不知道我做錯了頻道死亡在去
package main
import (
"fmt"
"sync"
)
func main() {
c := make(chan int, 2)
var wg sync.WaitGroup
wg.Add(2)
go doSomething(c, wg)
go doSomething(c, wg)
go doSomething(c, wg)
wg.Wait()
close(c)
for v := range c {
fmt.Print(v)
}
}
func doSomething(c chan<- int, wg sync.WaitGroup) {
defer wg.Done()
c <- 1
}
遊樂場鏈接https://play.golang.org/p/J9meD5aKna
我以爲在頻道關閉之前您無法對頻道進行排序。也許我錯了,但這就是它在這裏所說的http://guzalexander.com/2013/12/06/golang-channels-tutorial.html「正如上面提到的範圍將工作,直到通道明確關閉」。在這種情況下,我們需要等待另一個goroutine被執行。 – tabiul
你誤會了 - 關鍵是循環不會結束,直到通道關閉。所以如果頻道從未關閉,你將會有無限循環(它會等待下一個項目或關閉頻道)。 – ain
哦,那麼你的意思是,範圍將被阻止,直到頻道關閉。我認爲你的解決方案更好 – tabiul