美文网首页
iOS dispatch几种死锁的验证

iOS dispatch几种死锁的验证

作者: AlwaysBlue | 来源:发表于2019-10-21 15:32 被阅读0次

示例一:

会发生死锁,简单判断就是外部线程是主线程,dispatch_sync到的是主队列,主队列是个串行队列。

示例二:

不会发生死锁。思路:外面是主线程,内部是个全局并行队列,同步到的这个队列不和外面的线程一个队列,并且不是串行队列。因为是dispatch_sync是同步操作,把需要在主线程运行的block加入到0并发队列里。所以运行结果是:123.

dispatch_sync中block执行和外部所在线程是一个线程。但是有一种情况不是---请看示例四。

示例三:

会发生死锁。思路:NSLog(@"3")被同步到了自定义串行队列所在的线程,就会发生死锁。会输入152,然后发生死锁。

可以看出dispatch_async会为串行队列创建线程。

示例四:
问题一:dispatch_sync同步执行的任务会在哪个线程?

可以看出,都是在线程8执行的。
下面改为在主线程执行:

上面两组执行的结果都是15234。
上述例子不会发生死锁。

示例五:

在子线程中dispatch_sync到主线程的block任务,只会跟到最后吗?(此处请各位指教
所以,按照只会添加到最后的机制,把while(1)打开,2永远不会被执行。

几种死锁程序来自下面链接:
https://github.com/ming1016/study/wiki/细说GCD(Grand-Central-Dispatch)如何用

相关文章

网友评论

      本文标题:iOS dispatch几种死锁的验证

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