在goroutine 写入channel,为何还要在goroutine关闭才能遍历

delaywu · · 1235 次点击
你这样搞的话,Wait得等到ret写100个后退出同步,ret得等到range准备好后才能写入,range得等到Wait退出同步才能执行,死锁
#6
更多评论
delaywu
Golang在路上...
我自己想应该是使用 ``` wg.Wait() close(ret) ``` 阻碍的主线程,但是同时遍历是发生在主线程上。这时候定义的channel是无缓存的,这时候没办法发现这个无缓冲的channel又被消费的可能,故而会发生异常。这时候使用 协程的话,由于不堵塞。使得 channel消费成为的可能。 ``` go func() { defer close(ret) wg.Wait() }() ```
#1
fenglangjuxu
出售域名 http://letsgo.xin
关注
#2