先看段代碼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"); });
dispatch_barrier_async 做用是在並行隊列中,等待前面兩個操做並行操做完成,這裏是並行輸出
dispatch-1,dispatch-2
而後執行
dispatch_barrier_async中的操做,(如今就只會執行這一個操做)執行完成後,即輸出
"dispatch-barrier,
最後該並行隊列恢復原有執行狀態,繼續並行執行
dispatch-3,dispatch-4