美文网首页
GCD多线程之多任务并发等待所有任务完成

GCD多线程之多任务并发等待所有任务完成

作者: reallychao | 来源:发表于2018-06-22 10:47 被阅读30次

GCD多线程之多任务并发等待所有任务完成

在实际项目中我们经常会遇到,发出多个网络请求,然后等待所有结果都返回后,再进行下一步操作的需求。那么GCD完美的解决了这个样的需求。

1、第一种方式

1.  //创建队列组  
2.  dispatch_group_t group = dispatch_group_create();  

4.  dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  
5.  sleep(1);  
6.  NSLog(@"任务 1");  
7.  });  
8.  dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  
9.  sleep(2);  
10.  NSLog(@"任务 2");  
11.  }); 
12.  dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  
13.  sleep(3);  
14.  NSLog(@"任务 3");  
15.  });  

17.  //当所有的任务都完成后会发送这个通知  
18.  dispatch_group_notify(group, dispatch_get_main_queue(), ^{  
19.  NSLog(@"GCD_1 三个任务全部完成");  
20.  });  
21.  } 

2、第二种方式

1.  - (void)p_loadGCD_2 {  
2.  //创建队列组  
3.  dispatch_group_t group = dispatch_group_create();  

5.  //进入这个组  
6.  dispatch_group_enter(group);  
7.  dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  
8.  sleep(1);  
9.  NSLog(@"任务 1");  
10.  //这个组的任务完成时离开  
11.  dispatch_group_leave(group);  
12.  });  
13.  dispatch_group_enter(group);  
14.  dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  
15.  sleep(2);  
16.  NSLog(@"任务 2");  
17.  dispatch_group_leave(group);  
18.  });  
19.  dispatch_group_enter(group);  
20.  dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  
21.  sleep(3);  
22.  NSLog(@"任务 3");  
23.  dispatch_group_leave(group);  
24.  });  

26.  //当所有的任务都完成后会发送这个通知  
27.  dispatch_group_notify(group, dispatch_get_main_queue(), ^{  
28.  NSLog(@"GCD_2 三个任务全部完成");  
29.  });  
30.  }

第三种方式: 信号量

1.  - (void)p_loadGCD_3 {  
2.  //创建一个队列组  
3.  dispatch_group_t group = dispatch_group_create();  
4.  //创建一个信号量总数为10的semaphore  
5.  dispatch_semaphore_t semaphore = dispatch_semaphore_create(10);  

7.  for (NSInteger i = 0; i < 10; ++i) {  
8.  //等待信号,当信号总量小于0的时候就会一直等待,否则就继续执行,并让信号总量-1。  
9.  dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);  
10.  dispatch_group_async(group, dispatch_get_main_queue(), ^{  
11.  NSLog(@"任务 %ld", (long)i);  
12.  sleep(2);  
13.  //完成一个任务,发送一个信号,会让信号总量加1  
14.  dispatch_semaphore_signal(semaphore);  
15.  });  
16.  }  

相关文章

  • GCD多线程之多任务并发等待所有任务完成

    GCD多线程之多任务并发等待所有任务完成 在实际项目中我们经常会遇到,发出多个网络请求,然后等待所有结果都返回后,...

  • GCD多线程之多任务并发等待所有任务完成

    最近做了一个需求,针对一批数据,进行网络请求,请求结束后,根据返回结果,更新数据库.这种情况肯定是利用事务,批量更...

  • 多线程

    iOS中的几种多线程GCD1、GCD分为任务和队列,任务(同步,异步)队列(串行,并发),同步串行,同步主队列的情...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

  • iOS开发之GCD串行队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 实例d...

  • GCD之简介

    1.多线程方案介绍 2.GCD中常用函数 同步执行 异步执行 3.GCD中常用队列 并发队列可以让多个任务并发(同...

  • iOS多线程控制最大并发数

    iOS多线程最常用是GCD和NSOperation。一般简单的异步任务直接使用GCD,需要控制最大并发数和控制状态...

  • Swift多线程:GCD进阶,单例、信号量、任务组

    Swift多线程:GCD进阶,单例、信号量、任务组 Swift多线程:GCD进阶,单例、信号量、任务组

网友评论

      本文标题:GCD多线程之多任务并发等待所有任务完成

      本文链接:https://www.haomeiwen.com/subject/vuxkyftx.html