作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
给出以下示例:http://play.golang.org/p/owvJ8Oi77S
func produce(dataChannel chan int) {
for i := 0; i < 10; i++ {
dataChannel <- i
}
}
func main() {
dataChannel := make(chan int)
go produce(dataChannel)
go produce(dataChannel)
go produce(dataChannel)
for i := 0; i < 30; i++ {
data := <-dataChannel
fmt.Printf("%v ", data)
}
}
我认为从多个 go 例程写入 channel 不安全的假设是否正确?
是否有一种通用/惯用的方法可以安全地执行此操作?我知道您可以为每个生成数据的例程创建一个单独的 channel ,我只是想知道这是否是最干净的解决方案,或者是否还有其他替代方案。
最佳答案
channel 是完全线程安全的。它们是 goroutine 之间通信的官方方式。我认为您的代码没有任何问题。这就是围棋的美妙之处。
关于go - 从多个 go 例程中汇集数据的线程安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13690734/
我是一名优秀的程序员,十分优秀!