美文网首页
dispatch_sync 死锁该怎么理解?

dispatch_sync 死锁该怎么理解?

作者: 行走的风车 | 来源:发表于2018-09-19 16:43 被阅读11次
dispatch_sync(dispatch_get_main_queue(), ^{NSLog(@"Hello?");});

如果dispatch_sync()的目标queue为当前queue,会发生死锁(并行queue并不会).

我们知道dispatch_sync会阻塞上下文任务,当前上下文为主队列,而主队列是串行队列,加入的任务要按顺序执行,所以新加入的任务要排在上下文任务之后执行,即排在dispatch_sync执行完成之后,新任务(block任务)等待dispatch_sync执行完成后执行,而dispatch_sync需要等待block中的代码执行完毕后继续向下执行,因此造成相互等待的情况,死锁形成。

参考这张图片来理解一下这个问题

20180919153734638295780.png

相关文章

  • dispatch_sync 死锁该怎么理解?

    如果dispatch_sync()的目标queue为当前queue,会发生死锁(并行queue并不会). 我们知道...

  • 多线程进阶

    1.线程死锁问题 1) dispatch_sync(dispatch_get_main_queue(), ^{ ...

  • dispatch_sync到底为什么死锁

    之前看面试题知道下面代码会死锁,网上说是因为相互等待,等等,总觉得难以理解 dispatch_sync(dispa...

  • 死锁问题

    判断是否死锁 终极方法是判断死锁问题产生的根源是dispatch_sync 是否是发生在当前dispatch_s...

  • 面试题整理(一)

    1.堆和栈的区别 2.死锁问题 //死锁原因 dispatch_sync在等待block语句执行完成,而block...

  • GCD2

    1. 死锁 发生死锁原因:dispatch_sync会将任务追加到队列上,等当前的任务执行完毕,再执行Block中...

  • GCD的基本语法

    //异步主线程运行,不会产生生死锁 dispatch_sync(dispatch_get_main_queue()...

  • 同步串行导致的死锁问题

    GCD中同步操作dispatch_sync()中队列使用主队列会导致线程死锁,是众所周知的事情。但是是如何造成死锁...

  • 多线程引起死锁的几种情况及解决办法

    1.第一种情况:dispatch_sync(dispatch_get_main_queue(), ^{}引起死锁 ...

  • iOS基础篇-GCD死锁

    GCD死锁概念: 使用GCD多线程编程时,如果同步函数dispatch_sync(),目标queue为当前queu...

网友评论

      本文标题:dispatch_sync 死锁该怎么理解?

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