假设两个异步操作尝试在给定文件夹上的同一文件中读取或写入。 iOS如何处理?操作是否排队?该应用程序崩溃了?文件被破坏了?
如果由程序员来处理这个问题,我在哪里可以找到关于如何处理竞争条件,队列等的信息或示例?
你们能给我一个暗示吗?
感谢。
答案 0 :(得分:1)
我认为在尝试获取文件的文件描述符时,如果它已经在使用中,它应该会失败。
由于显然无法知道文件是否已经打开,因此可能有办法锁定文件。
可能有助于您的链接:
答案 1 :(得分:1)
最可能的答案是“文件被破坏”。操作系统不会做任何事情来阻止多个线程同时写入文件,如果他们写入文件的重叠部分,所有的赌注都会关闭。
因此,最好的办法是在访问文件时强制执行自己的排队。有很多方法可以解决这个问题。在较低级别,您可以使用NSLock
来阻止同时访问,或者您可能希望使用Dispatch Queue。 Julio的答案中提到的Concurrency Programming Guide是一个很好的参考。