【发布时间】:2014-11-09 17:20:36
【问题描述】:
Goroutines 在通道上阻塞的顺序是否决定了它们解除阻塞的顺序?我不关心发送的消息的顺序(它们保证是有序的),但会解除阻塞的 Goroutines 的顺序。
想象一个空 Channel ch 在多个 Goroutine(1、2 和 3)之间共享,每个 Goroutine 都试图在 ch 上接收消息。由于ch 为空,每个 Goroutine 都会阻塞。当我向ch 发送消息时,Goroutine 1 会先解锁吗?或者 2 或 3 可能会收到第一条消息? (反之亦然,Goroutines 试图发送)
我有一个playground 似乎表明 Goroutines 阻塞的顺序是它们被解除阻塞的顺序,但我不确定这是否是由于实现而导致的未定义行为。
【问题讨论】: