【发布时间】:2021-08-15 04:10:57
【问题描述】:
我目前正在关注tour of go 教程并进入频道部分,因为我正在做一些测试,我发现了一个我很难理解的奇怪行为
以下代码产生死锁错误
package main
import "fmt"
func main() {
c := make(chan string)
c <- "test"
fmt.Printf("%v", <- c)
}
但执行以下操作之一可以修复代码
使用缓冲通道:
package main
import "fmt"
func main() {
c := make(chan string, 1)
c <- "test"
fmt.Printf("%v", <- c)
}
或将值设置到不同线程上的通道
package main
import "fmt"
func main() {
c := make(chan string)
go func(){c <- "test"}()
fmt.Printf("%v", <- c)
}
第一版代码产生死锁的根本原因是什么?
【问题讨论】: