如果我的Cocoa应用程序中有两个线程,并且(让我们说),我正在使用NSData +dataWithContentsOfFile:
从磁盘上的文件X读取,另一个线程同时更新或替换相同的文件X ,说,-writeToPath:atomically:
?
我不熟悉Cocoa的标准文件读/写模式。读取操作是否会在文件中看到损坏?如果是这样,那么标准的方法是什么?使用POSIX函数可以有效地允许多个读者,但只允许一个独占作者?
感谢您在Cocoa API与底层文件系统之间建立理解的洞察力。
答案 0 :(得分:1)
读取操作是否会在文件中看到损坏?
如果您将atomically
设置为YES
,则不会。这样做是将数据写入临时文件,然后使用临时文件覆盖预期目标。这是原子的(无论如何都在本地文件系统上),因为它只是对目录的快速编辑。
如果您要立即开始写入预定目的地并且尚未完成,那么读取可能只会获得部分数据,即您通过了atomically:NO
。所以,在这种情况下,不要这样做 - 通过YES
。