dispatch_barrier_async函數

代碼

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作為流程控制的一種方式當然是用在并行環境當中啦。串行隊列中的任務會按照被添加進去先后次序執行。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容