美文网首页
多线程同步任务

多线程同步任务

作者: zxh123456 | 来源:发表于2020-04-07 14:40 被阅读0次

GCD组任务三部曲,

  1. 创建组
  2. 创建队列(一般选择自定义串行、并行、或者全局)
  3. 开启任务组任务
  4. 监听notify回调,处理后续逻辑
   dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_queue_create("queueByZxh", DISPATCH_QUEUE_SERIAL);

    dispatch_group_async(group, queue, ^{
        [NetWorkTool requestWithType:HttpRequestTypePost withHttpHeaderFieldDict:HYUSERTOKEN withUrlString:url withParaments:params withSuccessBlock:^(NSDictionary *responseObject) {
            NSLog(@"1111");
        } withFailureBlock:^(NSString *errorMsg) {
        } progress:^(float progress) {
        }];
    });

    dispatch_group_async(group, queue, ^{
        [Advertisement getAdsListByModelType:ModelType_ZHI_BO withResultBlock:^(NSDictionary *adverisementDict) {
            NSLog(@"2222");
        }];
    });
    
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"3333");
    });
//实际输出是3333、1111/2222、2222/1111

//理想状态输出是 1111 、 2222、 3333,可并不是。 3333先输出了,因为AFN网络请求又开启了新的异步线程,所以要增加信号量控制

 dispatch_group_t group = dispatch_group_create();
    dispatch_queue_t queue = dispatch_queue_create("queueByZxh", DISPATCH_QUEUE_SERIAL);
    dispatch_group_async(group, queue, ^{
        dispatch_semaphore_t sem = dispatch_semaphore_create(0);
        [NetWorkTool requestWithType:HttpRequestTypePost withHttpHeaderFieldDict:HYUSERTOKEN withUrlString:url withParaments:params withSuccessBlock:^(NSDictionary *responseObject) {
            NSLog(@"1111");
            dispatch_semaphore_signal(sem);
        } withFailureBlock:^(NSString *errorMsg) {
            dispatch_semaphore_signal(sem);
        } progress:^(float progress) {
        }];
        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
    });

    dispatch_group_async(group, queue, ^{
        dispatch_semaphore_t sem = dispatch_semaphore_create(0);
        [Advertisement getAdsListByModelType:ModelType_ZHI_BO withResultBlock:^(NSDictionary *adverisementDict) {
            NSLog(@"2222");
            dispatch_semaphore_signal(sem);
        }];
        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
    });
    
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        NSLog(@"3333");
    });

//实际输出 最后执行的3333

相关文章

  • 多线程同步任务

    GCD组任务三部曲, 创建组 创建队列(一般选择自定义串行、并行、或者全局) 开启任务组任务 监听notify回调...

  • iOS - Multi-Thread

    概念篇 进程 线程 多线程 单核多线程 & 多核多线程 并行 & 并发 同步 & 异步 队列 队列 & 任务 的执...

  • 多线程

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

  • Kotlin:该如何实现多线程同步?

    问题背景需执行多线程任务:任务1、任务2并行执行;等全部执行完成后,执行任务3。 实现方式「多线程同步」。Kotl...

  • iOS多线程-同步任务

    同步任何的作用: 在开发中,通常会将耗时操作放后台执行,有的时候,有些任何彼此有依赖关系! 例子:登录、支付、下载...

  • iOS • 记——多线程必知必会的原理概念

    多线程概念 同步 && 异步 同步:一个人依次执行多个任务异步:多个人同时执行多个任务 进程 && 线程 进程:1...

  • 多线程概念

    多线程概念: 是同步完成多项任务,提高资源多使用效率,多核的CPU运算多线程更为出色,在iOS应用中,对多线程的最...

  • iOS:多线程

    多线程,任务分为“同步”和“异步”;队列分为“串行”和“并发”。各个组合的结果如下: 一、同步串行 执行结果: 同...

  • 多线程

    了解多线程先了解 同步/异步 同步:多个任务情况下,一个任务A执行结束,才可以执行另一个任务B。只存在一个线程也就...

  • 不可不说的多线程

    关键字:多线程原理,队列(串行并行),任务(同步异步),NSThread,GCD,NSOperation,@syn...

网友评论

      本文标题:多线程同步任务

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