我正在做一些调试并且有一些这样的代码:
go func() {
if !finished {
fmt.Println("Writing the data")
writer.Write(data)
}
}()
finished
变量用于防止写入已关闭的编写器。但是,它没有用。它似乎正在通过标志。我确定对 Println 的调用产生了 goroutine,这可能允许编写器在检查标志之后但在尝试写入之前关闭。果然,删除调用似乎已经解决了它。然而,我想验证,更重要的是征求有关如何正确避免这种情况的建议,而不仅仅是避免在那里打印。
最佳答案
任何 I/O,是的,包括 fmt.Println
,都可能导致 goroutine 执行暂停。
但在实践中,这应该无关紧要,因为在任何具有多个 CPU 内核的现代硬件上,即使 goroutine 没有暂停,您也可以体验一场比赛。
您应该始终使您的代码并发安全。
关于go - goroutine 可以在 fmt.Println 调用期间进入休眠状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54015990/