int main(void) {
dispatch_queue_t queue = dispatch_queue_create(“com.somecompany.queue”, nil);
dispatch_sync(queue, ^{ // task 1
NSLog(@"Situation 1");
});
return 0;
}
这可以在main()中运行。
// -------------------------------------------
int main(void) {
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{ // task 1
NSLog(@"Situation 2");
});
return 0;
}
这是main()中的DEAD-LOCK。
// -------------------------------------------
为什么情况1可以,而情况2是DEAD-LOCK?两者都是主线程中的同步调用串行队列。
或者只是因为sync()本身在主队列中运行?
答案 0 :(得分:0)
在第一种情况下,您阻止主队列,直到任务在您创建的调度队列上完成执行,因此没有问题。
在第二种情况下,您尝试在主队列上调度任务,但主队列被dispatch_sync
阻止,因此提交的闭包无法启动。结果是死锁