我想知道在os.File上调用Write()是否是线程安全的。我很难在文档中找到任何提及线程安全的内容。
答案 0 :(得分:11)
约定(至少对于标准库)如下:除非明确说明(或从上下文中显而易见),否则没有函数/方法对于并发使用是安全的。
在没有外部同步的情况下,通过os.File
同时写入Write()
是不安全的。
答案 1 :(得分:0)
稍微浏览一下源代码后,我发现了以下最终由file.Write()调用的方法。由于存在竞争条件检查,我假设该呼叫在Go(Source)内实际上不是线程安全的。
但是,这些系统调用似乎不太可能在操作系统级别上是线程安全的。经过一番浏览后,我遇到了this interesting answer,这更加刺激了我的怀疑。对于Windows,source表示对WriteFile的通话似乎也是thread safe。