dispatch_queue_t queue = dispatch_queue_create("com.abc.efd", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
NSLog(@"1111111");
});
dispatch_async(queue, ^{
NSLog(@"2222222");
});
dispatch_barrier_async(queue, ^{
NSLog(@"---------");
});
dispatch_async(queue, ^{
NSLog(@"33333");
});
執(zhí)行結(jié)果為:
11111
22222
33333
如果沒有dispatch_barrier_async這行代碼NSLog(@"33333")的執(zhí)行順序則無法預(yù)料
dispatch_barrier_sync和dispatch_barrier_async的共同點(diǎn):
1、都會(huì)等待在它前面插入隊(duì)列的任務(wù)1账阻、2先執(zhí)行完
2咧七、都會(huì)等待他們自己的任務(wù)(0)執(zhí)行完再執(zhí)行后面的任務(wù)3
dispatch_barrier_sync和dispatch_barrier_async的不共同點(diǎn):
在將任務(wù)插入到queue的時(shí)候犀斋,dispatch_barrier_sync需要等待自己的任務(wù)尤慰,結(jié)束之后才會(huì)繼續(xù)程序猿涨,然后插入被寫在它后面的任務(wù)3晃择,然后執(zhí)行后面的任務(wù)
而dispatch_barrier_async將自己的任務(wù)冀值,插入到queue之后,不會(huì)等待自己的任務(wù)結(jié)束宫屠,它會(huì)繼續(xù)把后面的任務(wù)3插入到queue
所以列疗,dispatch_barrier_async的不等待(異步)特性體現(xiàn)在將任務(wù)插入隊(duì)列的過程,它的等待特性體現(xiàn)在任務(wù)真正執(zhí)行的過程