ios – 在当前队列上同步调度

ios – 在当前队列上同步调度,第1张

概述我知道你可能会发现这是一个奇怪的问题,但我只是在学习GCD,我想完全理解它的所有方面.所以这里是: 有没有理由在CURRENT QUEUE上发送任务SYNC? 例如: dispatch_queue_t concurrentQueue = dispatch_get_global_queue(...); dispatch_async(concurrentQueue, ^{ //t 我知道你可能会发现这是一个奇怪的问题,但我只是在学习GCD,我想完全理解它的所有方面.所以这里是:

有没有理由在CURRENT QUEUE上发送任务SYNC?

例如:

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(...);    dispatch_async(concurrentQueue,^{       //this is work task 0       //first do something here,then suddenly:       dispatch_sync(concurrentQueue,^{               //work task 1       });       //continue work task 0    });

我理解一件事:如果不使用concurrentQueue我使用串行队列,那么我在该串行队列上遇到死锁,因为工作任务1在工作任务0完成之前无法启动(因为串行队列保证了执行顺序),同时工作任务0无法继续执行,因为它等待SYNC调度函数返回(请纠正我,如果我错了,这将使我成为一个总菜鸟).

回到最初的想法,上面的代码和相同的代码之间有什么区别,而不是调用dispatch_sync函数我直接编写工作任务1代码?

解决方法 不,我无法想到在您已经使用的同一个并发队列上发送dispatch_sync的原因.如果你这样做,GCD将立即在同一个线程上直接调用你的块,就像你直接调用它一样. (我查了一下.)正如你所指出的那样,在串行队列上执行此 *** 作会使你陷入僵局. 总结

以上是内存溢出为你收集整理的ios – 在当前队列上同步调度全部内容,希望文章能够帮你解决ios – 在当前队列上同步调度所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1099761.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存