关于ios GCD global_queue
我有个函数是将数组存储到本地文件中去。
准备dispatch_async到global_queue中执行。
如果该函数在极短的时间内执行多次,会不会出现多个任务同时操作该本地文件的情况,这样子做是否安全?
如果不安全的话,用什么方法更好?
求大神指教
木有馅de包子
11 years, 10 months ago
Answers
global queue是异步队列。LZ的操作可能会造成某一时刻进行同时操作文件,导致数据异常。
换句话说对于你的操作不是线程安全的。解决方法有两个
1.使用NSUserDefault来做。 但是NSUserDefault有位数限制。
2.自己可以创建一个串行队列然后把然后自己的操作丢到队列里面。
#define SYNCGCDQUEUE "COM.CONEBOY.APP.GCD.SYNCGCDQUEUE"
@interface KKBaseGCDQueue : NSObject
/**
* 获取一个自定义的全局 同步 队列
*
* @return 返回全局 同步 队列
*/
+ (dispatch_queue_t)shareSyncGCDQueue;
@end
@implementation KKBaseGCDQueue
+ (dispatch_queue_t)shareSyncGCDQueue
{
static dispatch_queue_t baseSyncQueue = nil;
static dispatch_once_t createSyncBaseQueue;
dispatch_once(&createSyncBaseQueue, ^{
baseSyncQueue = dispatch_queue_create(SYNCGCDQUEUE, NULL);
});
return baseSyncQueue;
}
@end
// 使用
- (void)writeFiles{
dispatch_sync([KKBaseGCDQueue shareSyncGCDQueue],^{
NSLog(@"blk0");
dispatch_async(dispatch_get_main_queue(), ^{
// update UI
NSLog(@"main_queue---blk0");
});
});
}
nicoson
answered 11 years, 10 months ago