在Apple文档中,它说:



您如何编写代码来做到这一点?

最佳答案

特定队列上的故意死锁:

dispatch_queue_t queue = dispatch_queue_create("my.label", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
    dispatch_sync(queue, ^{
        // outer block is waiting for this inner block to complete,
        // inner block won't start before outer block finishes
        // => deadlock
    });

    // this will never be reached
});

很明显,外部块和内部块在同一队列上运行。发生这种情况的大多数情况是在dispatch_sync的调用者正在对其操作的队列不太明显的地方。这通常发生在(深层)嵌套堆栈中,您在其中执行最初在特定队列中启动的某个类中的代码,并且偶然地您将dispatch_sync调用到同一队列中。

关于ios - 如何在Grand Central Dispatch中造成死锁?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15381209/

10-14 22:05