1

问题陈述

一个进程打开一个文件进行追加(假设没有 O_APPEND,这里追加意味着先到lseek()文件末尾然后write()),然后分叉一个子进程。两个相关进程同时附加到文件中。假设lseek()write()都是原子的。举一个例子来讨论在这个场景中拥有lseek()write()成为一个原子操作的必要性。

我的想法

  1. 当前文件偏移量存储在打开文件表中的条目中,并且该条目由 2 个依赖进程共享。
  2. write()将偏移量更新到刚刚写入的数据的末尾。

这两点保证即使在下面的场景下, 写入的数据P2也不会被P1.

P1 lseek()
P2 lseek()
P2 write()  // after this operation, the offset still points to the file end
P1 write()

我的问题

那么,在这种特定情况下,是否lseek()仍然write()需要成为一个原子操作?

4

1 回答 1

0

事实证明,这是让我质疑自己的措辞。

答案是在这种特定情况下它们不必是原子操作。

于 2018-11-12T09:34:27.763 回答