dispatch_barrier_async和dispatch_barrier_sync
来源:互联网 发布:亿乐社区系统 v2.0源码 编辑:程序博客网 时间:2024/06/05 09:41
dispatch_barrier_async和dispatch_barrier_sync是 GCD 中的两个方法。是不是和dispatch_async及dispatch_sync长得很像,就是多了一个barrier(译:栅栏)。
没错,除了有dispatch_async或dispatch_sync的作用外(是否阻塞当前线程),还有“栅栏”的效果。
意思就是,在该队列,以他们为界,待前面任务执行完成,再把自己内部的任务执行完,才会执行后面的任务。
知道和dispatch_async及dispatch_sync对应,就应该想到:
dispatch_barrier_async不阻塞当前线程,dispatch_barrier_async里面的任务异步执行。
dispatch_barrier_sync会阻塞当前线程,dispatch_barrier_sync里面的任务同步执行。
例: dispatch_barrier_async
dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrentQ", DISPATCH_QUEUE_CONCURRENT); //以下任务 dispatch_async(concurrentQueue, ^{ NSLog(@"任务1"); }); dispatch_async(concurrentQueue, ^{ NSLog(@"任务2"); }); dispatch_async(concurrentQueue, ^{ NSLog(@"任务3"); }); dispatch_barrier_async(concurrentQueue, ^{ sleep(1); NSLog(@"I am barrier"); }); NSLog(@"当前线程"); dispatch_async(concurrentQueue, ^{ NSLog(@"任务4"); }); dispatch_async(concurrentQueue, ^{ NSLog(@"任务5"); });
打印:
例: dispatch_barrier_sync
dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrentQ", DISPATCH_QUEUE_CONCURRENT); //以下任务 dispatch_async(concurrentQueue, ^{ NSLog(@"任务1"); }); dispatch_async(concurrentQueue, ^{ NSLog(@"任务2"); }); dispatch_async(concurrentQueue, ^{ NSLog(@"任务3"); }); dispatch_barrier_sync(concurrentQueue, ^{ sleep(1); NSLog(@"I am barrier"); }); NSLog(@"当前线程"); dispatch_async(concurrentQueue, ^{ NSLog(@"任务4"); }); dispatch_async(concurrentQueue, ^{ NSLog(@"任务5"); });
打印:
注:
1.任务1,2,3是无序的。任务4,5是无序的。
2.I am barrier是任务1,2,3与任务4,5的分界线,总是等任务1,2,3执行完,然后I am barrier执行完,才会执行任务4,5。
3.dispatch_barrier_async会阻塞,dispatch_barrier_sync不会阻塞
阅读全文
0 0
- dispatch_barrier_async和dispatch_barrier_sync
- dispatch_barrier_async和dispatch_barrier_sync的使用
- dispatch_barrier_async和dispatch_barrier_sync的区别在哪呢?
- dispatch_barrier_async
- dispatch_barrier_async
- dispatch_barrier_async
- dispatch_barrier_async
- dispatch_barrier_async和dispatch_apply的使用
- GCD入门介绍四---- dispatch_group_async和dispatch_barrier_async
- dispatch_barrier_async函数
- dispatch_barrier_async函数
- GCD-dispatch_barrier_async
- GCD之五:dispatch_barrier_async
- GCD学习(五) dispatch_barrier_async
- dispatch_barrier_async的使用
- GCD学习(五) dispatch_barrier_async
- GCD学习 dispatch_barrier_async
- dispatch_barrier_async的作用是什么?
- 接口 和 抽象类 区别
- centos git 折腾
- 欧拉回路(欧拉路径)
- 最长回文串(可不连续)与最大公共子串(可不连续)
- Unsafe
- dispatch_barrier_async和dispatch_barrier_sync
- 项目——通过自动回复机器人学Mybatis(ajax优化)(四)
- 随机森林(python)
- 宏定义
- 计算机核心期刊排名及投稿信息
- spring项目无法引入@Resource注解的问题处理
- 相机工作原理
- Linux 入侵检测
- android sudo and shell