這裏是我主要功能的主體;初學者級代碼的死鎖
c := make(chan int)
go func() {
i := <-c
i++
time.Sleep(100 * time.Millisecond)
c <-i
}()
time.Sleep(1 * time.Second)
go func() {
i := <-c
i++
time.Sleep(100 * time.Millisecond)
c <-i
}()
time.Sleep(1 * time.Second)
fmt.Println(<-c)
我越來越死鎖error.even我試了waitgroups.hella撕開我的頭髮。
解釋答案對我來說很好。
沒有寫入'c',因此所有3個線程都被鎖定讀取。 – zerkms
我剛剛在println之前加了「c < - 0」,它可以工作,但是當我在第一次去func之前添加它之後,我得到了同樣的死鎖error.wth發生了什麼? –
@KadirSusuz在產生第一個goroutine之前添加寫入操作時,您正在嘗試寫入未緩衝的通道。此操作會阻塞,直到從通道讀取值,但尚未啓動goroutine以從中讀取。解決方案將首先啓動goroutines或創建一個緩衝通道。 – Gavin