0
点赞
收藏
分享

微信扫一扫

iOS多线程---死锁相关

基础知识:

下面是五道面试题,写出打印结果(题目从别人那盗的,但是作者写的看不明白,用自己语言总结一下)

第一题:

分析:

a.任务2 和 任务3 谁先加入 主线程的?

==> 因为 任务3 本身是在主线程里面的,任务2通过dispatch_get_main_queue(),添加到主线程的,所以就是3在前,任务2在后

b.主线程是串行的,也就是先执行3,后执行任务2

c.但是dispatch_sync,就会让进入等待状态,也就是任务3无法现在执行,只有等着任务2执行完后,才执行,

步骤b,c 就相互等待,进入死锁了。

答案:1

第二题:

分析:任务3,没有加入dispatch_get_global_queue,前面有dispatch_sync,就等着任务2执行。

答案:123

第三题:

分析: 任务5,不在dispatch_queue_create里面,前面是dispatch_async,可能5先执行,也可能任务2先执行。现在4已经在dispatch_queue_create里面了,但是前面又有dispatch_sync,等着3,3也需要加入dispatch_queue_create,3在4后面,和第一题一样,相互等待,死锁

答案:1 5 2  或 125

第四题:

分析:任务2 和 任务5并行,不确定那个先后,但是肯定在 3,4 之前

答案:15234 或者12534

第五题:

分析:任务1和任务4不一定那个先(两者并行),然后主线程死循环,主线程被阻塞,任务3加入全局队列,任务3前面有dispatch_sync,等着任务2 ,任务2加入了主线程,这时主线程已经死循环了,干不了事情,任务2挂了,任务3 也挂了,任务5早就挂了。

举报

相关推荐

0 条评论