我不明白为什么https://play.golang.org/p/_ALPii0pXV6不能正常工作,但是https://play.golang.org/p/vCOjAr-o54e可以工作。

据我了解,goroutine异步发送给a的值true和12到b的值。在主函数中,a被阻塞,直到接收到一个值。为什么当我重新排列它以使b在a之前被阻塞时会导致死锁?

最佳答案

默认情况下,Go channel 是无缓冲的。这意味着它无法在 channel 上发送,直到接收者正在读取 channel 为止。这实际上是Go首选模式。在大多数情况下,它比缓冲 channel 更有效。

对于您的第一个代码而言,意味着goroutine在完成对 channel a的写入之前无法继续写入 channel b。在主goroutine读取a之前,它无法执行此操作。

关于go - Golang channel 在接收值之前死锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54338051/

10-12 14:42
查看更多