【问题标题】:"Thread safety" of appending to single file from multiple processes?从多个进程附加到单个文件的“线程安全”?
【发布时间】:2012-07-15 22:16:16
【问题描述】:

假设我有 X 进程打开文件 Y 进行追加。每个进程一次只写入一行(带有 \n)(真正的日志条目)。

是否保证文件 Y 中的每一行都不会被错误地交错?

更新:本地附加文件系统。

【问题讨论】:

  • (我知道这不是真的进程内线程,而是..)
  • 看看this。我不确定它是否完全回答了你的问题,但它解释了写操作是如何发生的。

标签: linux file concurrency


【解决方案1】:

问题取决于正在进行的写入类型。如果您使用带缓冲的标准 I/O(这通常是大多数程序的默认设置),则缓冲区只会在写入几行后才被刷新,并且在刷新时不一定是整数行。如果您正在使用 write(2) 或已将默认 stdio 缓冲更改为 line 或 unbuffered,那么只要行大小合理(当然,如果行小于 512 字节),它可能会正确交错。

【讨论】:

    猜你喜欢
    • 2021-05-13
    • 2012-08-12
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多