这里是我主要功能的主体;初学者级代码的死锁
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