gpt4 book ai didi

multithreading - 多线程控制台输出?

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

如果我有多个 go-routines 正在进行并且其中 2 个或更多决定他们需要打印一些东西,他们是否可以互相打断?

例如:

package main

import (
"fmt"
)

func main() {
go print()
print()
}

func print() {
for true {
fmt.Print("ABCDEF")
}
}

是否有可能一个go-routine开始打印(AB)而另一个go-routine中断(ABABCDEF)和原来的整理(ABABCDEFCDEF)?

我已经尝试自己运行它并检查输出,它看起来不错,但我怎么能确定呢?

最佳答案

是的,这是可能的,尽管您在 GOMAXPROCS=1 时看不到任何结果。当运行更多的 goroutines、更大的行和更多的线程时,它们会出现。写入无缓冲的 stderr 时更是如此,因为 stdout 缓冲区接受短写入的速度足够快,有助于防止交错。

这就是为什么“log”包中的 Logger 具有内部互斥锁和缓冲区,以正确序列化调用。

关于multithreading - 多线程控制台输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31734215/

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