Cocoa文件操作的线程语义是什么?例如NSData读/写方法

时间:2010-10-14 04:56:36

标签: cocoa macos ios filesystems posix

如果我的Cocoa应用程序中有两个线程,并且(让我们说),我正在使用NSData +dataWithContentsOfFile:从磁盘上的文件X读取,另一个线程同时更新或替换相同的文件X ,说,-writeToPath:atomically:

我不熟悉Cocoa的标准文件读/写模式。读取操作是否会在文件中看到损坏?如果是这样,那么标准的方法是什么?使用POSIX函数可以有效地允许多个读者,但只允许一个独占作者?

感谢您在Cocoa API与底层文件系统之间建立理解的洞察力。

1 个答案:

答案 0 :(得分:1)

  

读取操作是否会在文件中看到损坏?

如果您将atomically设置为YES,则不会。这样做是将数据写入临时文件,然后使用临时文件覆盖预期目标。这是原子的(无论如何都在本地文件系统上),因为它只是对目录的快速编辑。

如果您要立即开始写入预定目的地并且尚未完成,那么读取可能只会获得部分数据,即您通过了atomically:NO。所以,在这种情况下,不要这样做 - 通过YES