iOS多线程--GCD同步并行任务

问题

如何用GCD实现图中要求:任务1、2、3并行;任务0等1、2、3都结束后执行;任务4、5、6并行并且等任务0结束后才执行 ?

方法一:group

dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, globalQueue, ^{
        NSLog(@"任务 1");
    });
dispatch_group_async(group, globalQueue, ^{
        NSLog(@"任务 2");
    });
dispatch_group_async(group, globalQueue, ^{
        NSLog(@"任务 3");
    });

dispatch_group_t group2 = dispatch_group_create();
//手动管理Group计数,必须配套dispatch_group_leave,计数减为零则触发Notifiy;否则依赖该Group的block会直接执行
dispatch_group_enter(group2); 
dispatch_group_notify(group, globalQueue, ^{
        dispatch_async(globalQueue, ^{
            NSLog(@"任务 0");
            dispatch_group_leave(group2);
        });
    });

dispatch_group_notify(group2, globalQueue, ^{
        dispatch_async(globalQueue, ^{
            NSLog(@"任务 4");
        });
        dispatch_async(globalQueue, ^{
            NSLog(@"任务 5");
        });
        dispatch_async(globalQueue, ^{
            NSLog(@"任务 6");
        });
    });

方法二:barrier

    dispatch_queue_t cocurrentQueue = dispatch_queue_create("concurrent queue", DISPATCH_QUEUE_CONCURRENT);
   dispatch_async(cocurrentQueue, ^{
        NSLog(@"任务 1");
    });
    dispatch_async(cocurrentQueue, ^{
        NSLog(@"任务 2");
    });
    dispatch_async(cocurrentQueue, ^{
        NSLog(@"任务 3");
    });
    dispatch_barrier_async(cocurrentQueue, ^{
        NSLog(@"任务 0");
    });
    dispatch_async(cocurrentQueue, ^{
        NSLog(@"任务 4");
    });
    dispatch_async(cocurrentQueue, ^{
        NSLog(@"任务 5");
    });
   dispatch_async(cocurrentQueue, ^{
        NSLog(@"任务 6");
    });

注意:barrier常配合并行队列,但只是对自己创建的并行队列有效,对于系统提供的全局并行队列无效,可能苹果是出于安全考虑而做了特殊处理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录:iOS多线程(一)--pthread、NSThreadiOS多线程(二)--GCD详解iOS多线程(三)--...
    Claire_wu阅读 1,101评论 0 6
  • iOS 多线程系列 -- 基础概述iOS 多线程系列 -- pthreadiOS 多线程系列 -- NSThrea...
    shannoon阅读 917评论 0 2
  • 1. GCD简介 什么是GCD呢?我们先来看看百度百科的解释简单了解下概念 引自百度百科:Grand Centra...
    千寻_544f阅读 424评论 0 0
  • 本文首发于我的个人博客:「程序员充电站」[https://itcharge.cn]文章链接:「传送门」[https...
    ITCharge阅读 349,552评论 308 1,927
  • 北漂已七年,有空经常关注房价,每次看完都是一样的结果,还是想想怎么多挣点钱吧! 感觉在挣钱的路上已迷失自我。。。
    在此之前阅读 188评论 0 0