多线程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函数也无往下进行,就出现了相互等待的现象,即死锁。

不定期更新中…

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容