美文网首页
dispatch_barrier_async用法

dispatch_barrier_async用法

作者: 云海绽放 | 来源:发表于2019-04-26 19:23 被阅读0次

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用法

      本文链接:https://www.haomeiwen.com/subject/runqnqtx.html