1.微博面试题
dispatch_queue_t queue = dispatch_queue_create("com.lg.cooci.cn", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ // 耗时 NSLog(@"1"); }); dispatch_async(queue, ^{ NSLog(@"2"); }); dispatch_sync(queue, ^{ NSLog(@"3"); }); NSLog(@"0"); dispatch_async(queue, ^{ NSLog(@"7"); }); dispatch_async(queue, ^{ NSLog(@"8"); }); dispatch_async(queue, ^{ NSLog(@"9"); });
// A: 1230789
// B: 1237890
// C: 3120798
// D: 2137890
结果:A或者C
分析:123顺序不定, 0 肯定在3后面 ,789 顺序不定, 肯定在0后面
2.快手面试题
dispatch_queue_t queue = dispatch_queue_create("cooci", NULL); NSLog(@"1"); // 异步函数 dispatch_async(queue, ^{ NSLog(@"2"); // 同步 dispatch_sync(queue, ^{ NSLog(@"3"); }); }); NSLog(@"5");
结果:打印 1 5 2 然后 dispatch_sync(queue 这一行死锁
分析:主线程 打印 1 5, dispatch_async(queue 新开辟一个子线程,子线程 打印 2,串行队列必须执行完一个任务再执行另一个。串行队列执行同步函数,然后同步函数又要获得串行队列去做其他事,形成死锁。
原文:https://www.cnblogs.com/huangzs/p/14831910.html