goroutine x,y
通道 a, 5 缓冲区容量 事情是这样的:如果有一种情况,当 a 已满并且 x 试图将新项目放入 a 时,x 处会被阻塞。当 y 来从 a 处获取物品时。
这是x input 和 y get 可以看作是同步动作的情况吗?,这可以看作是无缓冲通道交互吗?(它们同时动作,只是放入/获取不同的项目)就像x input 和 y get 时的无缓冲通道一样你明白了。
很抱歉,我不知道如何验证和对我的问题进行一些测试。所以我真的很期待一些见解和解释。
goroutine x,y
通道 a, 5 缓冲区容量 事情是这样的:如果有一种情况,当 a 已满并且 x 试图将新项目放入 a 时,x 处会被阻塞。当 y 来从 a 处获取物品时。
这是x input 和 y get 可以看作是同步动作的情况吗?,这可以看作是无缓冲通道交互吗?(它们同时动作,只是放入/获取不同的项目)就像x input 和 y get 时的无缓冲通道一样你明白了。
很抱歉,我不知道如何验证和对我的问题进行一些测试。所以我真的很期待一些见解和解释。
是的,这是一个同步点。
Go 内存模型表示:“容量为 C 的通道上的第 k 个接收在该通道的第 k+C 个发送完成之前同步。”
因此,在您的示例中,容量C为 5,k为 1,并且第一个接收(在 goroutine y中)在第 6 个发送(来自协程x)完成之前同步。
在 Go Playground 上尝试一下。请注意,从技术上讲,只有发送/接收是同步的,并且
Println
语句可能以不同的顺序显示 - 这仅用于演示目的。