先看段代碼
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