不废话,直接上代码,从代码的执行效果看如何使用
dispatch_queue_t queue = dispatch_queue_create("com.test.queue", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
for (NSInteger i = 0; i<100; i++) {
NSLog(@"a=%ld",(long)i);
usleep(100*1000);
}
});
dispatch_group_async(group, queue, ^{
for (NSInteger i = 0; i<100; i++) {
NSLog(@"b=%ld",(long)i);
usleep(100*1000);
}
});
dispatch_group_notify(group, queue, ^{
NSLog(@"上面两个线程结束了");
});
dispatch_group_async(group, queue, ^{
for (NSInteger i = 0; i<200; i++) {
NSLog(@"e=%ld",(long)i);
usleep(100*1000);
}
});
可实现多任务并行执行,任务结束后再做其他处理
如果在dispatch_group_notify后面再加一个线程会发现dispatch_group_notify也会等待后面的线程全部执行后执行,其实就是要等待组内的线程全部执行结束,可与dispatch_barrier 的效果对比学习