iOS-GCD死锁

  NSLog(@"1"); // 任务1
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"2"); // 任务2
    });

所谓死锁,通常指有两个线程A和B都卡住了,A在等B ,B在等A,相互等待对方完成某些操作。A不能完成是因为它在等待B完成。但B也不能完成,因为它在等待A完成。于是大家都完不成,就导致了死锁(DeadLock)。

死锁原因
dispatch_sync是同步的,本身就会阻塞主线程,需要等待任务2完成,而任务2需要在主线程中完成,但是dispatch_sync阻塞了主线程,相互等待,造成死锁

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

推荐阅读更多精彩内容

  • Queue (队列): 分为串行和并行, 串行队列按顺序开始执行, 执行完上一个才能执行下一个. 并行队列(开始也...
    丹单当阅读 3,666评论 0 0
  • 死锁一直都是在使用多线程时,需要注意的一个问题。以前对同步、异步,串行、并行只有一个模糊的概念,想想也是时候整理一...
    船长One阅读 5,333评论 0 5
  • 目录 一、基本概念1.多线程2.串行和并行, 并发3.队列与任务4.同步与异步5.线程状态6.多线程方案 二、GC...
    BohrIsLay阅读 5,493评论 5 12
  • 关键字:串行,并行,同步,异步,阻塞,死锁。作者:周辉All rights reserved. 同步(dispat...
    FaiChou阅读 4,357评论 4 8
  • GCD的基本使用 一、主队列介绍 主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队...
    GitHubPorter阅读 3,808评论 3 4