美文网首页iOS
多线程死锁

多线程死锁

作者: 说不出口的喵 | 来源:发表于2018-08-20 01:02 被阅读35次

异步执行block肯定不会发生死锁

事实上,导致死锁的原因一定是:

在某一个串行队列中,同步的向这个队列添加block。

同步的向串行队列中添加

另外,因为队列是可以嵌套的,比如在A队列(串行)添加一个任务a,在a这个任务中向B队列(串行)添加任务b,在b这个任务中又向A队列添加任务,这就间接满足了“在某一个串行队列中,同步的向这个队列添加block”。但是我们好像每一次都没有直接向相同的队列中添加block。

所以:判断是否发生死锁的最好方法就是看有没有在串行队列(当然也包括主队列)中向这个队列添加任务

我们使用同步的方法编程,往往是要求保证任务之间的执行顺序是完全确定的。且不说GCD提供了很多强大的功能来满足这个需求,向串行队列中同步的添加任务本身就是不合理的,毕竟队列已经是串行的了,直接异步添加就可以了。

dispatch_sync(dispatch_get_main_queue(), ^(void){

NSLog(@"这里死锁了"); 

 });

dispatch_async(dispatch_get_global_queue(0,0), ^(void){

NSLog(@"这就不死锁了");

});

dispatch_queue_t queue = dispatch_queue_create("SimaSDK", nil);

dispatch_sync(queue, ^(void){

NSLog(@"这个也不会死锁");

});

相关文章

  • Java自学-多线程 死锁

    Java 演示多线程死锁 当业务比较复杂,多线程应用里有可能会发生死锁 步骤 1 : 演示死锁 线程1 首先占有对...

  • Java并发案例01---多线程之死锁

    多线程之死锁案例一

  • jstack命令:教你如何排查多线程问题

    这是之前的一个死锁案例: 一个多线程死锁案例,如何避免及解决死锁问题? 如程序中发生这样的死锁问题该如何排查呢?我...

  • 并发编程情况下几个相应问题简介

    1.并发编程的挑战之死锁 ​ 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多...

  • 5. 死锁

    线程死锁 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序...

  • 多线程分析——死锁代码demo

    前言 本文主要是对Java多线程死锁代码demo的分析,对其过程以及死锁进行了大致的概括,希望对大家有帮助。 死锁...

  • 面试官:连多线程问题你都一问三不知,还要我怎么“放水”?

    面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁? 程序员阿里:这个...死锁......

  • 线程同步中的死锁

    何为死锁 多线程各自持有不同的锁,并互相试图获取对方已持有的锁,导致无限等待的状况,称为死锁。比如: 避免死锁 避...

  • iOS多线程总结

    多线程 优缺点,实际应用多线程比较死锁:使用同步sync,向同一个/当前的串行队添加任务,会产生死锁新等旧,旧等新...

  • 6. 使用synchronized实现死锁

    死锁定义 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序...

网友评论

    本文标题:多线程死锁

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