文章目录
close 解除读取 chan 阻塞
上方的例子是通过 waitgroup 等待让所有的 goroutine 都运行完毕之后,wait 函数才会被放行(注意加上超时处理)。试想一下存在这样的琴况,如果 wait 函数要等待所有 goroutine 结束才能放行,可是这些 gouroutine 因为从 chan 读取不到数据而造成阻塞,则这些 goroutine 可能一直陷入阻塞,而 wait 函数也一直无法放行,就有可能陷入死锁,所以我们有另一种思考,如果不是 wait 函数固执的希望所有 goroutine 必须都要等待他们自己处理完 wait 函数才能继续执行呢?我们假如把 wait 函数考虑换成一种方式可以让 chan 虽然读取不到数据但是依然可以解除 chan 阻塞让 goroutine 运行完成呢?我们也可以看看下面伪代码
// 一个 chan
c := make(chan int)
// 开启多协程,匿名