在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/