主进程中添加任务到GCD的main queue会卡死,而如果用生成的queue却正常运行:
dispatch_queue_t serialQueue = dispatch_queue_create("squeue",NULL);
// dispatch_queue_t mainQueue = dispatch_get_main_queue();
NSLog(@"Main Queue-->%@", dispatch_get_main_queue());
dispatch_sync(serialQueue, ^{//如果用mainQueue就卡死
NSLog(@"Task 1-->%@", [NSThreadcurrentThread]);
});
在main()中执行没问题,如果dispatch_sync改用mainQueue的话就卡死了。
这个是最典型的互相等待导致锁死呀。
调用的dispatch_sync函数一直得不到返回,main queue被阻塞,而我们的block又需要等待main queue来执行它,死锁愉快的产生了。
1Everything in your program runs on the main queue except for code that you explicitly dispatch onto another queue. Code on the main queue will always run on the main thread. Code dispatched on another queue may or may not run on the main thread.
当然也可能是自己太菜,连所有语句都是运行在主队列上这种大家都普遍默认的常识都不懂,所以才会大费周章的解释死锁现象。因为以前用c,不太有iOS主队列的概念。
网友评论