如果我有多个 go-routines 并且其中 2 个或更多的人决定他们需要打印一些东西,他们是否有可能互相打断?例如:package mainimport ( "fmt")func main() { go print() print()}func print() { for true { fmt.Print("ABCDEF") }}是否有可能一个 go-routine 开始打印(AB)而另一个 go-routine 中断(ABABCDEF)和原始完成(ABABCDEFCDEF)?我试过自己运行它并检查输出,它看起来不错,但我怎么能确定呢?
1 回答
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
是的,这是可能的,尽管您不会看到 GOMAXPROCS=1 的任何内容。当运行更多的 goroutine、更大的行和更多的线程时,它们会出现。在写入无缓冲的 stderr 时更是如此,因为 stdout 缓冲区足够快地接受短写入以帮助防止交错。
这就是“log”包中的 Logger 具有内部互斥锁和缓冲区的原因,以正确序列化调用。
- 1 回答
- 0 关注
- 201 浏览
添加回答
举报
0/150
提交
取消