Bog*_*dru 7 concurrency multithreading grand-central-dispatch ios
我知道你可能会发现这是一个奇怪的问题,但我只是在学习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
});
Run Code Online (Sandbox Code Playgroud)
我理解一件事:如果不是concurrentQueue我使用串行队列,那么我在该串行队列上得到一个死锁,因为work task 1直到work task 0完成才能启动(因为串行队列保证执行顺序),并且在同一时间work task 0不能继续执行,因为它等待SYNC dispath函数返回(请纠正我,如果我错了,这将使我成为一个总菜鸟).
回到最初的想法,上面的代码和相同的代码之间有什么区别,而不是调用dispatch_sync函数我只是work task 1直接编写代码?
不,我想不出dispatch_sync你曾经在同一个并发队列上的原因.如果你这样做,GCD将立即在同一个线程上直接调用你的块,就像你直接调用它一样.(我查了一下.)正如你所指出的那样,在串行队列上执行此操作会使你陷入僵局.
| 归档时间: |
|
| 查看次数: |
1628 次 |
| 最近记录: |