关于GCD中同步函数+主队列产生死锁的一点理解
来源:互联网 发布:js将字符串转换为加减 编辑:程序博客网 时间:2024/05/29 16:27
- 首先看个产生死锁的代码
-(void)syncMain{ //获得主队列 dispatch_queue_t queue = dispatch_get_main_queue(); NSLog(@"start"); //同步函数 dispatch_sync(queue, ^{ NSLog(@"------ %@",[NSThread currentThread]); }); NSLog(@"end");}
上述代码中是不会执行到 NSLog(@”end”) 将 end 打印出来的, 当然,再开一条线程来执行syncMain是不会产生死锁
原因解释
同步函数与主队列的特点
- 同步函数 dispatch_sync : 立刻执行,并且必须等这个函数执行完才能往下执行
- 主队列特点:凡是放到主队列中的任务,都会放到主线程中执行..如果主队列发现当前主线程有任务在执行,那么主队列会暂停调度队列中的任务,直到主线程空闲为止
综合同步函数与主队列各自的特点,不难发现为何会产生死锁的现象,主线程在执行同步函数的时候主队列也暂停调度任务,而同步函数没有执行完就没法往下执行…简陋的解决办法,上文提到.要么不这么用.
阅读全文
0 0
- 关于GCD中同步函数+主队列产生死锁的一点理解
- 关于多线程中同步函数+主队列的问题
- GCD主队列死锁和全局队列
- 主队列中添加的同步操作永远不会被执行,会死锁原因
- 主队列-异步执行;主队列-同步执行(死锁)
- 关于主队列 + 异步任务的理解修正
- GCD—主队列
- GCD 主队列/并行队列/全局队列/主队列/串行队列/同步任务/异步任务区别
- GCD之主队列、全局并发队列、以及同步任务的执行
- GCD-同步,异步分别在串行队列,并发队列,主队列下的执行方式
- GCD主队列、全局队列
- GCD 串行队列,并发队列和主队列的整理
- GCD 串行队列,并发队列和主队列的整理
- GCD死锁的理解
- GCD介绍。串行队列、并行队列、全局队列、主队列、同步任务、异步任务
- 关于GCD 队列,同步异步的理解
- GCD的一点理解
- GCD的一点理解
- 安卓开发 ActivieAndroid使用步骤详解,遇到的那些坑。
- Numpy 入门笔记
- Spring MVC ---ModelAndView
- 自定义view构建CircleBar
- 流程控制语句——do while
- 关于GCD中同步函数+主队列产生死锁的一点理解
- 010 Editor 注册码
- SharedPreferences深入了解—关于跨进程SharedPreferences
- AxonFramework,测试带注解的Saga
- 209. Minimum Size Subarray Sum
- filter与servlet区别
- 北大方正集团丑闻不断,证据如山
- github-知名组织
- 第51课: Spark中的新解析引擎Catalyst源码SQL最终转化为RDD具体实现