GCD主队列死锁和全局队列
来源:互联网 发布:龙江网络投诉电话 编辑:程序博客网 时间:2024/05/16 07:59
每一个应用程序只有一个主线程即只有一个主队列
在线程间通信中一定会使用,文章链接
http://blog.csdn.net/sinat_20559947/article/details/52608333
主队列 : 在主线程
全局队列 : 在子线程
#pragma mark - 主队列 + 异步任务 == 正确的打开方式// 主队列使用的注意点 : 一定要将异步的任务添加到主队列- (void)GCDDemo{ // 1.获取主队列 dispatch_queue_t mainQueue = dispatch_get_main_queue(); // 2.把异步任务添加到主队列 dispatch_async(mainQueue, ^{ NSLog(@"%@",[NSThread currentThread]); }); NSLog(@"正确的姿势");}
死锁:用过GCD的同学都知道
主线程中的执行时顺序执行的
那么下面的代码里,执行到
dispatch_sync(mainQueue, ^{
NSLog(@”%@”,[NSThread currentThread]);
的时候
就会在主队列中添加一个任务
我们暂且称它为A任务
因为,这些代码本身就书写在主线程中
那么我们将这段代码添加到了主线程中作为任务A
但是它本身也是一个任务,称它为B
想执行任务B中的NSLog,那么就必须执行任务A
而任务A,就是执行任务B
两个任务互相依赖
任务A包含任务B,执行顺序是A->B
完成A的前提是完成B
而执行任务B的前提是执行完了任务A
所以造成了一个互相等待的情况,谁也无法执行
所以无法解锁,造成死锁现象
#pragma mark - 主队列 + 同步任务 == 死锁- (void)GCDDemo{ // 1.获取主队列 dispatch_queue_t mainQueue = dispatch_get_main_queue(); // 2.把同步任务添加到主队列 dispatch_sync(mainQueue, ^{ NSLog(@"%@",[NSThread currentThread]); });}
- (void)GCDDemo{ // 全局队列 /* 参数1 : 服务质量 / 优先级 参数2 : 苹果不知道这个参数的作用;给将来升级系统时预留的; 提示 : 开发中建议使用全局队列.执行的效果和自定义的并行队列是一样的 提示 : 当使用GCD的高级功能里面的barrier(阻塞)的时候,一定要用自定义的并行队列 */ dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0); // 自定义并发队列 /* 参数1 : 队列的标识 参数2 : 决定了队列是并发的还是串行的 */ dispatch_queue_t queue = dispatch_queue_create("LONG", DISPATCH_QUEUE_CONCURRENT);}
0 0
- GCD主队列死锁和全局队列
- GCD主队列、全局队列
- GCD编程中的主队列和全局队列
- GCD全局队列与主队列
- 全局队列/主队列/
- GCD 主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- GCD 串行队列,并发队列和主队列的整理
- GCD 串行队列,并发队列和主队列的整理
- GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务
- CGD全局并发队列和主队列的应用
- IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- iOS学习笔记74-IOS多线程知识总结/队列概念/GCD/主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别附代码
- ios多线程操作(六)—— GCD全局队列与主队列
- GCD之主队列、全局并发队列、以及同步任务的执行
- ios多线程操作(六)—— GCD全局队列与主队列
- ios多线程操作(六)—— GCD全局队列与主队列
- ios-day19-02(GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务)
- iOS GCD/主队列/并行队列/全局队列/串行队列/同步任务/异步任务区别 含代码
- spring boot初识
- CSS:CSS选择器之【伪类/元素选择器】
- 那些年踩过的坑之UINavigationController
- 华为oj 名字的漂亮度
- UnCodebase
- GCD主队列死锁和全局队列
- win7无法获得administrator权限???? unity导入插件提示dll文件出错。对dll无法复制移动解决办法!
- c#对象反序列化与对象序列化示例详解
- CABasicAnimation animationWithKeyPath Types
- 8bit校准测试工具mtd-utils的移植和使用
- 用llvm简单遍历一个bc文件
- 第十五章课后第6题
- 嵌入式开发经验学习
- 贯通Hibernate开发:从入门到精通