关于GCD线程顺序的几个题,认识一下
来源:互联网 发布:手机版经传软件 编辑:程序博客网 时间:2024/06/03 17:18
//测试第一个CGD的运行结果
dispatch_queue_t queue = dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
NSLog(@"1");//主线程
//同步
dispatch_sync(queue, ^{
NSLog(@"2");//分线程
//同步
dispatch_sync(queue, ^{
NSLog(@"3");//分线程
});
NSLog(@"4");//分线程
});
NSLog(@"5");//主线程
//结果输出:1、2、3、4、5
//测试第二个CGD的运行结果
NSLog(@"111");//主线程
//异步
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"222");//分线程
//同步
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"333");//主线程
});
NSLog(@"444");//分线程
});
NSLog(@"555");//主线程
//结果输出:1、5、2、3、4
//测试第三个CGD的运行结果
NSLog(@"1..");//主线程
//同步
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"2..");//主线程
});
NSLog(@"3..");//主线程
//结果输出:只有1,然后崩掉了,因为造成了线程锁死
/**
原因:对于主队列无论是同步异步都不会创建线程,而且主队列中的任务只有在主线程空闲的时候才会执行.如果是主队列同步会造成互相等待而锁死.主队列同步任务等待主线程执行,主线程之后的任务等待主队列任务完成。
解决办法:在主队列外面套一层并发队列的异步任务.或者使用主队列异步任务
**/
//解决第三个GCD线程锁死
NSLog(@"1..");//主线程
//异步
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"2..");//主线程
});
NSLog(@"3..");//主线程
//结果输出:1、3、2
知识点看我的这篇博客:http://blog.csdn.net/hbblzjy/article/details/51235990
- 关于GCD线程顺序的几个题,认识一下
- 使用GCD处理几个线程之间的依赖关系。
- GCD的顺序下载
- 关于线程的几个方法的使用说明
- 关于GCD的8题
- 关于gcd的8题
- 关于线程的几个面试题
- java.关于线程同步的几个知识点
- GCD关于队列和函数对于调用线程的影响
- GCD 线程的应用
- GCD线程的应用
- 认识一下
- 认识一下
- GCD 常用的几个方法
- GCD并发的执行顺序
- 几个事件的顺序
- 关于gcd的8题(*)
- 关于GCD的证明
- php 关于秒杀
- 【36】一个canvas写的验证码
- 更简单的上传你的代码到jcenter
- LAP+Mysql主从发布Discuz论坛
- uWSGI, Gunincorn, 啥玩意儿?
- 关于GCD线程顺序的几个题,认识一下
- Eclipse设置条件断点
- 实现页面三秒跳转
- 购物车 自定义加减器
- ansible Introduction To Ad-Hoc Commands:
- Arcgis---从数据库中获取数据绘制道路
- RecyclerView高级应用——自定义ItemDecoration
- 通过super调用父类属性和方法
- 第八周(1)项目5---计数的模式匹配