dispatch_barrier_(a)sync
2019-03-20 本文已影响0人
Nulll
在iOS中未来保存某些任务顺序的执行,需要使用dispatch_barrier 来执行。
dispatch_barrier 会让之前的代码先执行完毕;
然后在执行 dispatch_barrier 里面的代码;
之后在执行 dispatch_barrier 后面的代码;
dispatch_barrier_sync 同步执行;
dispatch_barrier_async 异步执行;
直接代码展示。
// 创建一个 queue
dispatch_queue_t queue = dispatch_queue_create("dispatch_queuq", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
sleep(1);
NSLog(@"test1");
});
NSLog(@"aaaaaa");
dispatch_async(queue, ^{
sleep(1);
NSLog(@"test2");
});
dispatch_async(queue, ^{
sleep(1);
NSLog(@"test3");
});
NSLog(@"bbbbbb");
dispatch_barrier_async(queue, ^{
NSLog(@"000000");
sleep(1);
NSLog(@"111111");
sleep(1);
NSLog(@"test0");
});
dispatch_async(queue, ^{
sleep(1);
NSLog(@"test4");;
});
NSLog(@"cccccc");
dispatch_async(queue, ^{
sleep(1);
NSLog(@"test5");
});
dispatch_async(queue, ^{
sleep(1);
NSLog(@"test6");
});
NSLog(@"dddddd");
结果为如下图片。
屏幕快照 2019-03-20 下午5.24.07.png
///将
dispatch_barrier_async(queue, ^{
NSLog(@"000000");
sleep(1);
NSLog(@"111111");
sleep(1);
NSLog(@"test0");
});
/// 其实 dispatch_barrier_async 是异步执行方法。
///修改为
dispatch_barrier_sync(queue, ^{
NSLog(@"000000");
sleep(1);
NSLog(@"111111");
sleep(1);
NSLog(@"test0");
});
/// 同步执行。
结果为:
屏幕快照 2019-03-20 下午5.24.55.png