dispatch_barrier_async用法

dispatch_queue_t queue = dispatch_queue_create("com.abc.efd", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"1111111");
});
dispatch_async(queue, ^{
NSLog(@"2222222");
});
dispatch_barrier_async(queue, ^{
NSLog(@"---------");
});
dispatch_async(queue, ^{
NSLog(@"33333");
});
执行结果为:
11111
22222


33333
如果没有dispatch_barrier_async这行代码NSLog(@"33333")的执行顺序则无法预料
dispatch_barrier_sync和dispatch_barrier_async的共同点:
1、都会等待在它前面插入队列的任务1、2先执行完
2、都会等待他们自己的任务(0)执行完再执行后面的任务3
dispatch_barrier_sync和dispatch_barrier_async的不共同点:
在将任务插入到queue的时候,dispatch_barrier_sync需要等待自己的任务,结束之后才会继续程序,然后插入被写在它后面的任务3,然后执行后面的任务
而dispatch_barrier_async将自己的任务,插入到queue之后,不会等待自己的任务结束,它会继续把后面的任务3插入到queue
所以,dispatch_barrier_async的不等待(异步)特性体现在将任务插入队列的过程,它的等待特性体现在任务真正执行的过程

你可能感兴趣的:(dispatch_barrier_async用法)