dispatch_sync(dispatch_get_main_queue(), ^{NSLog(@"Hello?");});
如果dispatch_sync()
的目標(biāo)queue
為當(dāng)前queue
涣狗,會發(fā)生死鎖(并行queue
并不會).
我們知道dispatch_sync
會阻塞上下文任務(wù)粮坞,當(dāng)前上下文為主隊列,而主隊列是串行隊列,加入的任務(wù)要按順序執(zhí)行,所以新加入的任務(wù)要排在上下文任務(wù)之后執(zhí)行债鸡,即排在dispatch_sync
執(zhí)行完成之后,新任務(wù)(block
任務(wù))等待dispatch_sync
執(zhí)行完成后執(zhí)行铛纬,而dispatch_sync
需要等待block
中的代碼執(zhí)行完畢后繼續(xù)向下執(zhí)行厌均,因此造成相互等待的情況,死鎖形成告唆。
參考這張圖片來理解一下這個問題
20180919153734638295780.png