代碼
dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(concurrentQueue, ^(){
NSLog(@"dispatch-1");
});
dispatch_async(concurrentQueue, ^(){
NSLog(@"dispatch-2");
});
// dispatch_barrier_async(concurrentQueue, ^(){
// NSLog(@"dispatch-barrier");
// });
dispatch_async(concurrentQueue, ^(){
NSLog(@"dispatch-3");
});
dispatch_async(concurrentQueue, ^(){
NSLog(@"dispatch-4");
});
首先執(zhí)行這段代碼,并行隊列里面異步4個任務(wù)认臊。那么4個任務(wù)完成的先后是無法保證的圃庭。
如果加入被注釋掉的那段代碼,加入了barrier失晴,那么在并行隊列中的1234 4個任務(wù)的完成次序如何剧腻?
我跑了幾次代碼,最終結(jié)果都有兩個相同點涂屁,
1书在、34任務(wù)必定在12任務(wù)同時完成之后才被執(zhí)行。
2拆又、12儒旬,34之間的執(zhí)行次序不定
代碼的第一行 DISPATCH_QUEUE_CONCURRENT 代表這個queue 是并發(fā)性質(zhì)的。
如果換成串行呢遏乔?結(jié)果是這樣的
結(jié)果是每次執(zhí)行順序都是1234义矛,有沒有barrier 都無關(guān),很明顯盟萨,barrier作為流程控制的一種方式當(dāng)然是用在并行環(huán)境當(dāng)中啦凉翻。串行隊列中的任務(wù)會按照被添加進去先后次序執(zhí)行。