我知道你可能会觉得这是一个奇怪的问题,但我刚刚学习 GCD,我想完全理解它的所有方面。所以这里是:
是否有任何理由在当前队列上分派任务同步?
例如:
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
我用一个serial队列,然后我在该串行队列上遇到死锁,因为work task 1
无法启动,直到work task 0
完成(因为串行队列保证了执行顺序),同时work task 0
无法继续执行,因为它等待 SYNC dispath 函数返回(如果我错了,请纠正我,这会让我成为一个十足的菜鸟)。
那么回到最初的想法,上面的代码和不调用的相同代码之间有什么区别吗?dispatch_sync
我简单写的函数work task 1
直接打码?
不,我想不出一个理由dispatch_sync
在您已经所在的同一个并发队列上。如果您这样做,GCD 将立即在同一线程上内联调用您的块,就像您直接调用它一样。 (我检查过。)正如您所指出的,在串行队列上执行此操作将使您陷入僵局。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)