天天看點

GCD之dispatch_barrier_asyc

 dispatch_queue_t  testqueue = dispatch_queue_create("com.test.testqueue", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(testqueue, ^{

            NSLog(@"a=%ld",(long)i);

            for (NSInteger j=0; j<100; j++) {

                NSLog(@"b=%ld",(long)j);

                usleep(100*1000);

            }

    });

    dispatch_async(testqueue, ^{

        NSLog(@"a=%ld",(long)i);

        for (NSInteger j=0; j<100; j++) {

            NSLog(@"c=%ld",(long)j);

            usleep(100*1000);

        }

    });

    dispatch_barrier_async(testqueue, ^{

        NSLog(@"前面兩個并行的結束");

    });

    dispatch_async(testqueue, ^{

        for (NSInteger j=0; j<200; j++) {

            NSLog(@"dd = %ld",(long)j);

            usleep(100*1000);

        }

    });

1.dispatch_barrier_async 作用是在并行隊列中,等待前面兩個操作并行操作完成,這裡是并行輸出
作用很明顯,可實作多任務并行操作,等待全部操作結束後執行其他操作  
2.在dispatch_barrier_asyc 後面再加一個線程會發現最後這個線程會等待上面的執行結束後再執行,可與dispatch_group 的效果對比不同之處