在常用的SDWebImageDownloaderOperation類文件中我夢會看到dispatch_barrier_async(self.barrierQueue, ^{
[self.callbackBlocksaddObject:callbacks];
});對dispatch_barrier_async。那么我們?nèi)绾卫斫鈊ispatch_barrier_async通過下面這段代碼的log時間可以很清晰的看到。


可以看到patch_barrier_async 效果類似 dispatch_async,區(qū)別就是中間多了一個barrier,barrier顧名思義就是屏障的意思,將隊(duì)列一分為2,前面的代碼執(zhí)行完才能執(zhí)行dispatch_barrier_async中的任務(wù),最后執(zhí)行隊(duì)列后的任務(wù)。


可以看到patch_barrier_sync 效果類似 patch_barrier_async,都是將隊(duì)列一分為2,前面的代碼執(zhí)行完才能執(zhí)行dispatch_barrier_sync中的任務(wù),最后執(zhí)行隊(duì)列后的任務(wù)。但是dispatch_barrier_sync是在主線程中執(zhí)行,dispatch_barrier_async是在子線程中執(zhí)行。如果有界面相關(guān)功能的代碼,或者需要立即執(zhí)行的代碼,就可以使用dispatch_barrier_sync。其他情況均可用dispatch_barrier_async在子線程中完成。