当前位置: 首页 > 面试题库 >

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

董意蕴
2023-03-14
问题内容

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


问题答案:

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

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

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



 类似资料:
  • 问题内容: 作为一个愚蠢的基本线程练习,我一直在尝试在golang中实现睡眠理发师问题。使用通道,这应该很容易,但是我遇到了heisenbug。也就是说,当我尝试诊断时,问题消失了! 考虑以下。该函数将整数(或“客户”)压入通道。阅读频道来剪掉“顾客”的头发。如果我在函数中插入一条语句,程序将按预期运行。否则,切勿剪任何人的头发。 知道发生什么了吗? 问题答案: 问题是Go的调度程序的实现方式。当

  • 问题内容: 我已经搜索过,但我只能找到有关另一种方式的问题:将stdin写入文件:) 有没有一种快速简便的方法将文件内容转储到stdout? 问题答案: 当然。假设您有一个字符串,文件名为,下面的技巧就可以了。

  • 问题内容: 对标准输出进行漂亮打印(也称为格式化)的最简单方法是什么? 问题答案: 调用,该方法如下所示: (这是可选的,可能不适用于您的特定配置)

  • 我有一个像下面这样的Python脚本: 我以以下方式执行: 然后我检查是否有任何初始输出,但没有: 我至少希望在几秒钟后看到“开始”。即使等了几分钟,然后杀了它,我也没有输出。如果可能,我该如何解决这个问题?

  • 问题内容: 我正在使用getifaddrs()和inet_ntop()来获取系统上的ip地址。当系统设置为IPv6时,返回的地址为简化版本(使用::表示零)。有什么办法可以将该地址扩展为完整地址吗? 这是我正在使用的代码: 代码非常感谢。 编辑: 由于这显然很难理解,我举一个例子: 如果我得到abcd:12 :: 3,我需要将其扩展为abcd:0012:0000:0000:0000:0000:00

  • 有没有一种方法可以让CUPS在尚未完成最后一个作业的情况下将作业排队到IPP打印机? 背景:我们有一台XEROX Workcenter打印机,它有自己的作业队列。每次有人想要打印时,他们都必须将作业假脱机,将他们的支付卡插入打印机,然后在打印机触摸板上选择他们的作业。但是,当在中央服务器上使用CUPS时,CUPS只在最后一个作业完成时后台处理下一个作业,因此只有第一个后台处理的人才能看到并支付他们