iOS多线程-GCD之dispatch_barrier_async

上一篇 iOS多线程-GCD之Dispatch Group

一、释义

void dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);

dispatch_barrier_async一般叫做“栅栏函数”,它就好像栅栏一样可以将多个操作分隔开,在它前面追加的操作先执行,在它后面追加的操作后执行。
栅栏函数也可以执行队列上的操作(参数列表中有queue和block),也有对应的 dispatch_barrier_sync 函数。

二、代码示例

- (void)testBarrierAsync
{
    //创建一个并行队列
    dispatch_queue_t concurrentQueue = dispatch_queue_create("com.gcd.barrier.concurrentQueue", DISPATCH_QUEUE_CONCURRENT);
    
    //并行操作
    void (^blk1)() = ^{
        NSLog(@"1");
    };
    void (^blk2)() = ^{
        NSLog(@"2");
    };
    void (^blk3)() = ^{
        NSLog(@"3");
    };
    void (^blk4)() = ^{
        NSLog(@"4");
    };
    void (^blk5)() = ^{
        NSLog(@"5");
    };
    void (^blk6)() = ^{
        NSLog(@"6");
    };
    
    //栅栏函数执行操作
    void (^barrierBlk)() = ^{
        NSLog(@"Barrier!");
    };
    
    //执行所有操作
    dispatch_async(concurrentQueue, blk1);
    dispatch_async(concurrentQueue, blk2);
    dispatch_async(concurrentQueue, blk3);
    dispatch_barrier_async(concurrentQueue, barrierBlk);
    dispatch_async(concurrentQueue, blk4);
    dispatch_async(concurrentQueue, blk5);
    dispatch_async(concurrentQueue, blk6);
}

方法执行结果:

2017-03-13 13:16:00.401 GCDLearn[959:57236] 2
2017-03-13 13:16:00.401 GCDLearn[959:57237] 1
2017-03-13 13:16:00.401 GCDLearn[959:57239] 3
2017-03-13 13:16:00.402 GCDLearn[959:57239] Barrier!
2017-03-13 13:16:00.402 GCDLearn[959:57237] 5
2017-03-13 13:16:00.402 GCDLearn[959:57239] 4
2017-03-13 13:16:00.402 GCDLearn[959:57236] 6

分析:
栅栏函数之前和之后的操作执行顺序都不固定,但是前面三个必然先执行,然后再执行栅栏函数中的操作,最后执行后面的三个。

三、注意点

dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block)

栅栏函数中传入的参数队列必须是由 dispatch_queue_create 方法创建的队列,否则,与dispatch_async无异,起不到“栅栏”的作用了,对于dispatch_barrier_sync也是同理。

GCD学习代码 如果觉得有用,顺便给颗星哦😄
下一篇:iOS多线程-GCD之dispatch_apply

推荐阅读更多精彩内容

  • 1. GCD简介 什么是GCD呢?我们先来看看百度百科的解释简单了解下概念 引自百度百科:Grand Centra...
    千寻_544f阅读 188评论 0 0
  • GCD (Grand Central Dispatch) :iOS4 开始引入,使用更加方便,程序员只需要将任务添...
    池鹏程阅读 934评论 0 2
  • iOS 多线程系列 -- 基础概述iOS 多线程系列 -- pthreadiOS 多线程系列 -- NSThrea...
    shannoon阅读 645评论 0 2
  • 本篇博客共分以下几个模块来介绍GCD的相关内容: 多线程相关概念 多线程编程技术的优缺点比较? GCD中的三种队列...
    有梦想的老伯伯阅读 679评论 0 4
  • 感赏今天儿子为了打积分比赛继续顶着炎炎烈日在球场上练球,看到他晒得跟黑人一样我真的感觉心里是满心疼的,今天中午的午...
    爱娃林丽华aw阅读 83评论 0 2
  • 难得的机会回本溪 与高中死党 见了面。真正的友情就是这样 不矫情 不做作。淡如静水。 因为工作的缘故,大家都各奔东...
    49d276182601阅读 190评论 0 3
  • VIM是什么 首先先来了解一下VIM究竟是什么,这里来引用一下百度百科上的内容 Vim是一个类似于Vi的著名的功能...
    机智的大口袋阅读 122评论 0 0
  • 有人事的地方,就有江湖。这是网络总结的结论。 无可否认,人心的复杂,不是简单一句话概述清楚。生活中随处...
    艺一国际文艺阅读 130评论 0 2