2

假设我有两个进程可以将相同的内容写入同一个文件:

echo "large content" > aFileName
cat aFileName

它需要同步/锁定吗?我可以确定在这样的命令之后,文件的内容不会被所有进程中的竞争条件破坏吗?

4

1 回答 1

1

每个进程都将使用自己的文件指针,因此在正常情况下应该是安全的。我能看到的唯一问题是:

  1. 进程A截断文件
  2. 进程A写入一些数据
  3. 进程B截断文件
  4. 进程B写入的内容少于A步骤 #2 中写入的内容
  5. 进程B异常终止而不写入整个文件

现在,在步骤 #2 中写入的一些数据丢失了,即使进程A继续写入其余数据。

您可以写入一个临时文件,在写入所有内容后自动重命名。确保临时文件与输出位于同一文件系统上,并在其名称中使用一些唯一标识符(例如进程 ID)。另外,设置一个陷阱处理程序来删除该文件。

这个解决方案的缺点是它占用更多的存储空间,因为临时文件的多个副本可能会同时写入,而且如果进程在陷阱处理程序无法运行的情况下死亡,一些临时文件可能会作为垃圾留在后面。

于 2013-08-11T14:34:20.233 回答