问题陈述
一个进程打开一个文件进行附加(假设没有O_APPEND,此处附加意味着首先将lseek()
附加到文件末尾,然后write()
),然后派生一个子文件。这两个从属进程同时追加到文件。假设lseek()
和write()
都是原子的。给出一个示例来讨论在这种情况下使lseek()
和write()
是原子操作的必要性。
我的想法
write()
将偏移量更新为刚写入的数据的末尾。这2点保证即使在以下情况下,由P2
写入的数据也不会被P1
覆盖。
P1 lseek()
P2 lseek()
P2 write() // after this operation, the offset still points to the file end
P1 write()
我的问题
因此,在这种特定情况下,lseek()
和write()
仍然需要成为一个原子操作吗?
答案 0 :(得分:0)
原来是让我问自己一个问题的措辞。
答案是,在这种特定情况下,它们不必是原子操作。