ios – 为什么在当前队列中调用dispatch_sync不会导致死锁

ios – 为什么在当前队列中调用dispatch_sync不会导致死锁,第1张

概述苹果文档说:( concurrencyProgrammingGuide,page49) 要点:您永远不应该从正在计划传递给该函数的同一队列中执行的任务调用dispatch_sync或dispatch_sync_f函数.这对于保证死锁的串行队列尤其重要,但对于并发队列也应该避免. 但是这里的代码不会造成死锁,因为我已经运行了很多次: dispatch_queue_t concurrentQueue 苹果文档说:( concurrencyProgrammingGuIDe,page49)
要点:您永远不应该从正在计划传递给该函数的同一队列中执行的任务调用dispatch_sync或dispatch_sync_f函数.这对于保证死锁的串行队列尤其重要,但对于并发队列也应该避免.

但是这里的代码不会造成死锁,因为我已经运行了很多次:

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(disPATCH_QUEUE_PRIORITY_DEFAulT,0);dispatch_async(concurrentQueue,^(){    NSLog(@"in outer queue: %@",[NSThread currentThread]);    dispatch_sync(concurrentQueue,^(){        NSLog(@"do someting thread: %@",[NSThread currentThread]);    });});

然而,我们都知道,在主线程上下文中,如果我们执行下面的代码,它将导致主线程中的死锁.所以我很困惑为什么在同一个线程中调用dispatch_sync,一个不是死锁(上面的代码),另一个相反(下面的代码)?

dispatch_sync(dispatch_get_main_queue(),^{        NSLog(@"________update__UI");    });
解决方法 dispatch_get_global_queue()返回系统定义的全局并发队列. 总结

以上是内存溢出为你收集整理的ios – 为什么在当前队列中调用dispatch_sync不会导致死锁全部内容,希望文章能够帮你解决ios – 为什么在当前队列中调用dispatch_sync不会导致死锁所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1014113.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存