代碼
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");
});
首先執行這段代碼,并行隊列里面異步4個任務。那么4個任務完成的先后是無法保證的。
如果加入被注釋掉的那段代碼,加入了barrier,那么在并行隊列中的1234 4個任務的完成次序如何?
我跑了幾次代碼,最終結果都有兩個相同點,
1、34任務必定在12任務同時完成之后才被執行。
2、12,34之間的執行次序不定
代碼的第一行 DISPATCH_QUEUE_CONCURRENT 代表這個queue 是并發性質的。
如果換成串行呢?結果是這樣的
結果是每次執行順序都是1234,有沒有barrier 都無關,很明顯,barrier作為流程控制的一種方式當然是用在并行環境當中啦。串行隊列中的任務會按照被添加進去先后次序執行。