如果数据没有在 select 语句中的正确时刻被捕获,那么通过 golang 中的通道进入的数据是否有可能被忽略?例如,假设有这个 select 语句:for { select { case <-timer.C: //block A default: // block B takes 2 seconds. }}如果计时器在块 B 运行时结束,块 A 是否仍在循环的下一次迭代中运行,或者通道的传入数据是否丢失?
1 回答
慕雪6442864
TA贡献1812条经验 获得超5个赞
当定时器超时时,它会在 C 上发送当前时间。如果当时没有人从 C 读取,则发送将阻塞,因此它将等待直到收到值。在这种情况下,它将等到循环的下一次迭代。
通道被设计为一种同步机制,因此它们不需要读者和作者已经同步。
- 1 回答
- 0 关注
- 156 浏览
添加回答
举报
0/150
提交
取消