多线程GCD的理解
串行队列或者并发队列都会遵循FIFO(先进先出)的原则
- (void)test
{
NSLog(@"Start");
dispatch_sync(dispatch_get_main_queue(), ^{});
}
上述代码是典型的死锁案例执行顺序是先执行Start,然后将block和主队列传给GCD的
dispatch_sync函数等待执行,直到它返回.由于主队列属于串行队列,先进先出,不能并发执行,当前只能执行一个任务, test函数作为一个
待执行的任务添加在主队列,dispatch_sync函数携带的block任务被添加到test后面,需要等待
test执行结束后才能执行,而dispatch_sync函数特性是等待block执行完毕后返回(同步阻塞当
前线程),而dispatch_sync不返回,test函数也无往下进行,就出现了相互等待的现象,即死锁。
【多线程GCD的理解】不定期更新中…
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- Linux下面如何查看tomcat已经使用多少线程
- 说得清,说不清