dispatch_async与dispatch_sync在不同队列中的理解

dispatch_async 和 dispatch_sync 决定调用该函数的线程是否被阻塞。
dispatch_async 一定会开启新线程执行block
dispatch_sync 一定不会开启新线程执行block
队列仅仅是一个block执行的环境,保证 FIFO
产生死锁充要条件: 在同一个串行队列中,同步的向这个串行队列执行任务。

更正
任务的执行是在队列中,队列可以在不同的线程中运行。
如果阻塞当前线程,那么任务在当前线程执行,否则另开线程执行任务。
不管什么队列,执行的顺序都是FIFO。

示例代码.png

日志输出.png

错误示例1


主线程串行队列同步发起任务到主线程队列导致死锁

错误示例2


串行队列serialQueue中同步添加任务到当前队列导致死锁

你可能感兴趣的:(dispatch_async与dispatch_sync在不同队列中的理解)