我有一个线程将文件写入文档目录,而另一个线程将尝试访问该文件并检查它是否可用以便使用它,否则它将使用临时变量。我的问题是如何测试其他线程是否已完成文件写入,或者是否正在写入,因为我正在检查文件。
答案 0 :(得分:2)
您不想检查其他线程是否正在使用它,因为另一个线程可能会在您检查后立即开始使用它。
相反,你想要的是一个锁或一个同步点。看看@synchronized()
和NSLock,这两者都可以帮助您确保多线程时的数据完整性。
答案 1 :(得分:2)
您可以使用辅助文件强制写入为原子,而不是检查是否完成。
如果您使用支持辅助文件的API编写文档,类似于[NSString writeToFile:... atomically:YES encoding:... error:...]
,则更改就像翻转开关一样简单。
如果您自己编写文件,请先写入具有不同名称的文件,关闭该文件,然后将其重命名为所需名称。
例如,在将文档写入@"myfile.doc"
的调用中,您可以将文档写入@"myfile.doc_aux"
,然后将其重命名为@"myfile.doc"
。如果第二个线程在写入完成之前检查是否存在@"myfile.doc"
,则检查将失败。但是,当检查成功时,您可以确定该文件已写入完成。