go - 写入两个单独的通道是否可靠地顺序?
问题描述
如果我在两个频道上有一个选择:
for {
select {
case <-chan1:
// do something
case <-chan2:
// do something else
}
}
在一个单独的 goroutine 中,我按顺序写入这些通道:
chan1 <- "blah"
chan2 <- true
我能保证在“做其他事情”之前看到“做某事”吗?
我知道如果 select 有两个未阻塞的通道,它会随机选择,但是我认为如果 select 已经阻塞,写入第一个通道可能会可靠地“中断”写入 goroutine,这意味着 select 将在未阻塞的第一个通道上运行之前第二个写。
解决方案
是的,如果通道没有缓冲,您可以依靠它。请参阅Go 内存模型。
推荐阅读
- scala - 类型列表采用类型参数(Play 中的编译错误)
- mysql - 大家好,我有一个存储过程并希望获得“交付”不同的计数,请帮助我该怎么做?
- c# - 以毫秒为单位的时间转换为本地日期字符串
- c# - 在单元测试中断言重复元素
- javascript - 在 Ruby on Rails 应用程序中反应 .js.jsx 扩展
- delphi - 使用“firedac”连接到访问数据库时模块“bds.exe”中的访问冲突
- python - python中的时间戳(年,月,日,小时,分钟)
- spring-boot - CrudRepository 类在我的 Spring Boot 项目中不可用我该如何解决这个问题
- html - 如何在输入框中输入最小值和最大值
- javascript - 将有关图像的数据附加到 UL List jQuery