我有一个线程将文件写入文档目录,而另一个线程将尝试访问该文件并检查它是否可用以便使用它,否则将使用临时变量。我的问题是如何测试其他线程是否已完成写入文件,或者在我检查文件时是否正在写入。如何知道另一个线程是否正在访问资源?
2
A
回答
2
与其检查完成情况,您可以使用辅助文件强制写入原子。
如果您使用支持辅助文件的API(类似于[NSString writeToFile:... atomically:YES encoding:... error:...]
)编写文档,则更改与翻转开关一样容易。
如果您自己正在编写该文件,请首先使用不同名称写入文件,关闭该文件,然后将其重命名为所需的名称。
例如,在将文档写入@"myfile.doc"
的调用中,您可以将文档写入@"myfile.doc_aux"
,然后将其重命名为@"myfile.doc"
。如果第二个线程在写入完成之前检查是否存在@"myfile.doc"
,则检查将失败。但是,如果检查成功,您可以确定该文件已写入完成。
2
您不想检查它是否被其他线程使用,因为其他线程可以在您检查后立即开始使用它。
而是,你想要的是一个锁或同步点。看看@synchronized()
和NSLock,两者都可以帮助您确保多线程时的数据完整性。
相关问题
- 1. 如何知道这个线程是否是一个UI线程
- 2. 无法访问Android上的另一个线程资源(崩溃)
- 3. UI线程如何知道另一个线程上的数据?
- 4. Python线程 - 如何知道线程是否已在运行?
- 5. 如何知道用户是否在线?
- 6. 当从CDN获取jquery.min.js或其他资源时,CDN是否知道客户端正在访问哪个网站?
- 7. iPhone - 我怎么知道一个URL是否是一个资源文件?
- 8. 如何从另一个资源中的统计资源访问属性?
- 9. 如何使qwidget知道另一个qwidget是否在它上面
- 10. 如何知道Ruby是否有路径在另一个之外?
- 11. iPhone通过两个线程访问一个资源
- 12. 如何知道laravel正在访问哪条路线?
- 13. 如何访问2个线程之间的共享资源?
- 14. 如何知道我是否访问ASM中的匿名课程?
- 15. 如何知道某个进程是否正在运行?
- 16. 如何知道是否从位图图像视图或资源
- 17. 如何知道是否正在对angular2
- 18. 如何在同一资源上同步两个进程访问?
- 19. 访问睡眠线程资源
- 20. 从另一个应用程序访问资源?
- 21. 通过另一个应用程序访问jenkins资源
- 22. Jena - 如何知道某个特定资源是否在模型中?
- 23. 我需要知道一个进程是否正在运行
- 24. 我如何知道在Windows CE下是否挂起一个线程?
- 25. 如何知道一个线程是否在SWT环境中完成其任务?
- 26. 如何知道用户是否从另一个服务登录
- 27. Android的 - 如何知道是否覆盖另一个视图RelativeLayout
- 28. 知道GCD线程是否正在运行
- 29. 如何从另一个应用程序访问字符串资源
- 30. 如何知道我有另一个线程与主线程分开?