iOS 多个网络请求并行完成后执行某一操作

1: dispatch_semaphore_create(value: Int) ->dispatch_semaphore_t!

    该函数使用一个初始值创建一个dispatch_semaphore_t类型的信号量,注意:这里的传入的参数value必须大于或等于0,否则dispatch_semaphore_create会返回NULL

2:dispatch_semaphore_wait(dsema: dispatch_semaphore_t,_ timeout:dispatch_time_t) ->Int

     等待信号量,该函数会使传入的信号量dsema的值减1

3:dispatch_semaphore_signal(dsema: dispatch_semaphore_t) ->Int

     发送一个信号,这个函数会使传入的信号量dsema的值加1

    当返回值为0时表示当前并没有线程等待其处理的信号量,其处理的信号量的值加1即可。当返回值不为0时,表示其当前有(一个或多个)线程等待其处理的信号量,并且该函数唤醒了一个等待的线程(当线程有优先级时,唤醒优先级最高的线程;否则随机唤醒.

函数的作用:如果dsema信号量的值大于0,该函数所处线程就继续执行下面的语句,并且将信号量的值减1;如果desema的值为0,那么这个函数就阻塞当前线程等待timeout

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue, ^{

      NSLog(@"处理事件1");
      dispatch_semaphore_signal(semaphore);
});
dispatch_group_async(group, queue, ^{
        NSLog(@"处理事件2");
        dispatch_semaphore_signal(semaphore);
});
dispatch_group_notify(group, queue, ^{
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        NSLog(@"end");
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值