为了账号安全,请及时绑定邮箱和手机立即绑定

多线程控制台输出?

多线程控制台输出?

Go
侃侃尔雅 2021-10-25 18:28:36
如果我有多个 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 具有内部互斥锁和缓冲区的原因,以正确序列化调用。


查看完整回答
反对 回复 2021-10-25
  • 1 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信