gpt4 book ai didi

go - 使用多个 goroutines 写入同一个 channel

转载 作者:IT王子 更新时间:2023-10-29 01:33:37 26 4
gpt4 key购买 nike

这段代码工作正常,我的问题是为什么。我了解到,在阻塞之前,您只能将一个值发送到无缓冲 channel 。但是在我的代码中,我写了两次,但是来自不同的 go 例程,并且它有效。如果有人能向我解释原因,将不胜感激!

func main(){
var ch chan string =make(chan string)
go write(ch)
go write2(ch)
go read(ch)
select{}
}

func write(ch chan string){
for{
ch<-"write1"
}
}

func write2(ch chan string){
for{
ch<-"write2"
}
}

func read(ch chan string){
for{
time.Sleep(time.Second)
select{
case res:= <-ch: fmt.Println(res)
case <-time.After(time.Millisecond*200): fmt.Println("time out")
}
}
}

最佳答案

你可以再次写入它,因为你从它读取。读取操作后可能会发生另一次写入。从哪个 goroutine 执行写入或读取操作并不重要。

Go Memory Management页面对此进行了解释。

关于go - 使用多个 goroutines 写入同一个 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29342701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com