写在前面, 开辟多线程是会占用更多内存的, 不要滥开线程, 当然现在iPhone内存2G, 适当的使用是极好的
如果有个需求, 在某一段代码之后, 将后面代码放入同步线程, 让其等待前面代码执行完, 再执行barrier之后的代码, 用在一定要有先后顺序的代码, 比如创建完数据库再创建表
先来个队列属性, 方便在不同作用域使用
@property (nonatomic, strong) dispatch_queue_t queue;
#pragma mark - 创建数据库
- (void)createDataBase{
//创建并发队列, 异步完成数据库创建, 然后barrier同步等待数据库创建之后, 创建表
_queue = dispatch_queue_create("com.10000114.ForDatabase",DISPATCH_QUEUE_CONCURRENT);
dispatch_async(_queue, ^{
[[NAFMDBHelper sharedFMDBHelper] createDatabase];
});
//等待数据库创建完再创建表
dispatch_barrier_sync(_queue, ^{
[self createUserInfoTable];
});
}
#pragma mark - 创建表
- (void)createUserInfoTable{
//异步完成表的创建
dispatch_async(_queue, ^{
[[NAFMDBHelper sharedFMDBHelper] createUserInfoTable];
});
}
如果是同时执行两组代码, 可以用Dispatch Group 和 Dispatch_set_target_queue , 但方便的话是dispatch_barrier_async, 这个我暂时还没试验
例子
dispatch_queue_t queue = dispatch_queue_create(
"com.example.gcd.ForBarrier",DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue,blk0_for_reading);
dispatch_async(queue,blk1_for_reading);
dispatch_async(queue,blk2_for_reading);
//同时执行一个
dispatch_barrier_async(queue,blk_for_writing);
dispatch_async(queue,blk3_for_reading);
dispatch_async(queue,blk4_for_reading);