一个例程实际上在哪个点阻塞?



我定义了非缓冲通道并做了这些

1。在一次例程中写入一些值。

2。从主go例程中读取它的值。

下面的示例

package main
import "fmt"
func main() {
c := make(chan int)
go func() {
for i := 0;i < 3; i++ {
c <- i
fmt.Printf("write %v to channeln", i)
}
}()
for i := 0; i < 3; i++ {
res := <-c
fmt.Printf("read %v from channeln", res)
}
}

输出
write 0 to channel
read 0 from channel
read 1 from channel
write 1 to channel
write 2 to channel
read 2 from channel

我不明白这个顺序。后从通道读取0从通道读取1";在此事件之后,它还没有被推送到通道?

我读语句,就像一旦值被推入它,go例程被阻塞,直到其他go例程从中读取值。但是在哪个点(或者上面的例子中的哪一行)它被阻塞了呢?

有人能解释一下吗?

问题在于fmt。Printf,不能保证你的输出不会混合。

相关内容

  • 没有找到相关文章

最新更新