iOS - 死锁

作者: aven_kang | 来源:发表于2022-03-14 13:54 被阅读0次
原因:使用sync函数往当前串行队列中添加任务,会卡住当前的串行队列(产生死锁)
NSLog(@"执行任务1");
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
NSLog(@"执行任务2");
});

NSLog(@"执行任务3");

我们来梳理一下这个流程
主线程: 任务1->sync->任务3
主队列:viewDidLoad->任务2
在主线程里,任务3在等待任务2(sync)的执行完毕,而在主队列,任务2在等待viewDidLoad执行完毕,而任务3恰巧就在viewDidLoad里面,造成了任务3在等任务2,任务2在等任务3,如下图所示


image.png
NSLog(@"执行任务1");

dispatch_queue_t queue = dispatch_queue_create("myqueu", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{ // 0
NSLog(@"执行任务2");

dispatch_sync(queue, ^{ // 1
NSLog(@"执行任务3");
});

NSLog(@"执行任务4");
});

NSLog(@"执行任务5");
上面这段代码同样会造成死锁,任务4卡在了任务3这里,基本上第一个的情况是差不多的

相关文章

  • 死锁 GCD 多线程

    死锁 GCD 多线程 Ios - LDSmallCat - 博客园 Ios中GCD死锁困扰很多人,分享一点个人经...

  • 个人推荐ios博客,文章

    GDC死锁http://ios.jobbole.com/82622/ NSTimer、CADisplayLink、...

  • iOS 死锁案例和产生的原因

    iOS 死锁案例和产生的原因 上面的代码会打印什么呢?答案是死锁 死锁的原因是由于队列引起的循环等待: 我们在主队...

  • IOS开发 GCD产生死锁的总结

    在IOS开发中GCD的使用频率很高,但是使用不当,则会产生死锁,以下是我的对GCD产生死锁的总结。 了解死锁之前首...

  • iOS - 死锁

    原因:使用sync函数往当前串行队列中添加任务,会卡住当前的串行队列(产生死锁) 我们来梳理一下这个流程主线程: ...

  • 01-iOS多线程 ——图解死锁

    死锁 - 死锁问题,是iOS开发中必须要理解的问题,可能光看一些讲解死锁的代码并不是很容易理解。我制作了下面这幅图...

  • iOS 10线程死锁

    今天,项目在iOS 10 上运行遇到线程死锁,后台进前台就死锁,导致ui卡死,在点击授权的alert也会卡死,比如...

  • 多线程死锁

    转载自 [http://www.cocoachina.com/ios/20161129/18216.html]死锁...

  • iOS-知识点

    五个案例让你明白GCD死锁:http://ios.jobbole.com/82622/ iOS开发中多线程间关于锁...

  • 『ios』线程死锁还是队列死锁? 死锁测试

    之前 『ios』主线程 和 主队列的关系,绝对安全的UI操作,主线程中一定是主队列?在这片文章中,总结了下主线程和...

网友评论

    本文标题:iOS - 死锁

    本文链接:https://www.haomeiwen.com/subject/yjnjdrtx.html