来自不同渠道的数据可以被忽略吗?

时间:2015-05-07 18:04:26

标签: go channel

如果在select语句中没有及时捕获到golang中通道的数据,是否有可能被忽略?

例如,假设有这个select语句:

for {
    select {
    case <-timer.C:
        //block A
    default:
        // block B takes 2 seconds.
    }
}

如果在块B运行时计时器结束,块A是否仍然在循环的下一次迭代中运行,或者通道的传入数据是否丢失?

1 个答案:

答案 0 :(得分:3)

当计时器到期时,它将在C上发送当前时间。如果当时没有人从C读取,则发送将被阻止,因此它将等待直到接收到该值。在这种情况下,它将等到循环的下一次迭代。

频道被设计为同步机制,因此它们不需要已经同步读者和作者。