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, ^{
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 的效果对比不同之处