代码之家  ›  专栏  ›  技术社区  ›  Ben Zotto sberry

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

  •  0
  • Ben Zotto sberry  · 技术社区  · 14 年前

    如果我的cocoa应用程序中有两个线程,并且(比如说),我正在用一个nsdata从磁盘上的文件x读取 +dataWithContentsOfFile: ,另一个线程正在同时更新或替换同一个文件x,例如 -writeToPath:atomically: ?

    我不知道cocoa的标准文件读/写模式是什么。读取操作是否可以看到损坏的中间文件?如果是这样,标准的解决方法是什么?使用POSIX函数可以有效地允许多个读卡器,但只允许一个独占的编写器?

    感谢您的洞察,它将我对CocoaAPI和底层文件系统的理解连接起来。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Peter Hosey    14 年前

    读取操作是否可以看到损坏的中间文件?

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

    如果您要立即开始写入目标而没有完成,那么读操作可能只会获取部分数据,例如,您通过了 atomically:NO . 所以,在这种情况下,不要这样做 .