iOS多线程死锁

什么情况下会产生死锁:

使用sync往当前串行队列中添加任务,会卡主当前的串行队列,造成死锁


举例一:此情况会发生死锁,

1、这是创建了一个同步队列,同步队列的特点就是排队,FIFO,先进先出;

2、这是主线程的一个同步队列,遵循先进先出原则,viewDidLoad是先进的,所以应该要先执行完viewDidLoad才能执行48行;

3、但是这又是一个串行队列,要顺序执行,所以结果就是50行要等56行,56行要等50行;

4、这就造成了死锁。


举例二:

1、虽然同样是在主队列不会开启新线程,

2、但因为是异步执行,它会等别的任务执行完了再在开始执行“任务2”:


举例三:

注:这种情况下不会产生死锁.

因为:“任务3”和“任务2”不是在同一个队列里;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容