1. 声明成员变量
/**
GCD 中提供了全局队列
但是,在第三方框架中,为了获取更大的灵活性,通常会自己创建队列
*/
@interface ViewController (){
// 串行队列成员变量
dispatch_queue_t _queue;
}
@end
2. 初始化创建串行队列
_queue = dispatch_queue_create("com.me.queue", DISPATCH_QUEUE_SERIAL);
3. 测试
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self demo1];
}
///串行队列前套使用 异步正常,同步会挂掉,相互等待
-(void) demo1 {
//串行队列,同步执行不能嵌套使用
dispatch_sync(_queue, ^{
NSLog(@"AAAAAA");
dispatch_sync(_queue, ^{
NSLog(@"BBBBB");
});
});
}
///串行队列的演示
-(void) demo{
for (int i = 0; i<10; i++) {
//耗时的操作需要异步执行
dispatch_async(dispatch_get_global_queue(0, 0), ^{
//数据库操作又需要保证同一时间,只能有一个操作
//同步执行 - 串行线程没有开线程的能力
//同步,能够做到,即使在异步执行所有的数据库操作任务,仍然能够保证顺序
dispatch_sync(_queue, ^{
NSLog(@"%@ %d",NSThread.currentThread, i);
});
});
}
}