Sync dispatch on current queue

concurrency, grand-central-dispatch, ios, multithreading

Solution

No. I can't think of a reason to ever `dispatch_sync` on the same concurrent queue you're already on. If you do that, GCD will just immediately invoke your block, in-line, on the same thread, as if you had called it directly. (I checked.) And as you pointed out, doing that on a serial queue will deadlock you.

Problem

I know you might find this an odd question, but I'm just learning GCD and I want to fully understand all its aspects. So here it is: Is there ever any reason to dispatch a task SYNC on the CURRENT QUEUE? For example: ``` 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 }); ``` I understand one thing: if instead of `concurrentQueue` I use a serial queue, then I get a deadlock on that serial queue, because `work task 1` cannot start until the `work task 0` is finished (because of the serial queue that guarantees order of execution), and in the same time `work task 0` cannot continue its execution because it waits for the SYNC dispath function to return (please correct me if I'm wrong, that would make me a total noob). So coming back to the original idea, is there any difference whatsoever between the code above and the same code where instead of calling the `dispatch_sync` function I simply write `work task 1` code directly?

Original source

Related problems