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

将多个goroutine打印到stdout是否安全?

将多个goroutine打印到stdout是否安全?

Go
湖上湖 2021-05-17 14:17:48
我的程序中有多个goroutine,每个goroutine都进行调用而fmt.Println没有任何显式同步。这样安全吗(即,每行将单独出现而不会破坏数据),还是我需要创建另一个带有同步的goroutine来专门处理打印?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

不,即使您有时可能没有发现任何麻烦,也不安全。IIRC,fmt软件包试图处于安全状态,因此可能会发生某种混合,但希望不会导致进程崩溃。

这是更通用的Go文档规则的一个实例:除非另有指定或从上下文中可以明显看出,否则对于并发访问而言,事物并不安全。

可以使用带有少量初始设置的日志包来获得fmt.Print *功能的子集的安全版本。


查看完整回答
反对 回复 2021-05-31
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

一切fmt都回落到这里w.Write()可以看出。因为周围没有锁,所以一切都归结到的实现。由于仍然没有锁定(至少对于Stdout),因此不能保证您的输出不会混合。Write()

我建议使用全局日志例程。

此外,如果您只想记录数据,请使用该log程序包,该程序包会正确锁定对输出的访问。请参阅实现以供参考。


查看完整回答
反对 回复 2021-05-31
  • 3 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

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