Ios 如何知道另一个线程是否正在访问ressource?

Ios 如何知道另一个线程是否正在访问ressource?,ios,objective-c,multithreading,Ios,Objective C,Multithreading,我让一个线程将一个文件写入文档目录,而另一个线程将尝试访问该文件并检查它是否可用以使用它,否则它将使用一个临时变量。我的问题是如何测试另一个线程是否已完成文件的写入,或者在我检查文件时它是否正在写入。您不想检查另一个线程是否正在使用它,因为另一个线程可以在您检查后立即开始使用它 相反,您需要的是一个锁或同步点。看看@synchronized()和NSLock,它们都可以帮助您确保多线程时的数据完整性 您可以使用辅助文件强制写入原子,而不是检查是否完成 如果您正在使用支持辅助文件的API编写文档,

我让一个线程将一个文件写入文档目录,而另一个线程将尝试访问该文件并检查它是否可用以使用它,否则它将使用一个临时变量。我的问题是如何测试另一个线程是否已完成文件的写入,或者在我检查文件时它是否正在写入。

您不想检查另一个线程是否正在使用它,因为另一个线程可以在您检查后立即开始使用它


相反,您需要的是一个锁或同步点。看看
@synchronized()
和NSLock,它们都可以帮助您确保多线程时的数据完整性

您可以使用辅助文件强制写入原子,而不是检查是否完成

如果您正在使用支持辅助文件的API编写文档,类似于
[NSString writeToFile:…原子性:YES encoding:…error:…]
,那么更改就像翻转开关一样简单

如果您自己正在写入文件,请先使用其他名称写入文件,关闭该文件,然后将其重命名为所需名称

例如,在将文档写入
@“myfile.doc”
的调用中,您可以将文档写入
@“myfile.doc\u aux”
,然后将其重命名为
@“myfile.doc”
。如果第二个线程在写入完成之前检查是否存在
@“myfile.doc”
,则检查将失败。但是,当检查成功时,您可以确定文件已写入完成