我的程序中有多个Goroutine,每个Goroutine在没有任何显式同步的情况下调用fmt.Println
.这是否安全(即,每行将单独出现而不会损坏数据),或者我是否需要创建另一个具有同步功能的Goroutine来专门处理打印?
我的程序中有多个Goroutine,每个Goroutine在没有任何显式同步的情况下调用fmt.Println
.这是否安全(即,每行将单独出现而不会损坏数据),或者我是否需要创建另一个具有同步功能的Goroutine来专门处理打印?
不,这不安全,即使你有时可能没有发现任何问题.IIRC,fmt包试图安全起见,因此可能会发生某种混合,但希望不会出现进程崩溃.
这是一个更通用的GO文档规则的实例:除非另行指定,或者在上下文中显而易见的情况下,否则并发访问是不安全的.
您可以使用带有一些小初始设置的日志(log)包,获得fmt.Print*功能的一个很好的子集的安全版本.