美文网首页
栅栏函数

栅栏函数

作者: 开着保时捷堵你家门口 | 来源:发表于2018-11-21 11:16 被阅读13次

GCD中有两个用来执行任务的常用函数

用同步方法执行任务,其中 queue 是队列,block 是任务

dispatch_sync(dispatch_queue_t queue, dispatch_block_t blcok);

用异步方法执行任务,其中 queue 是队列,block 是任务

dispatch_async(dispatch_queue_t queue, dispatch_block_t blcok);

同步和异步的区别

同步:只能在当前线程中执行任务,不具备开启新线程的能力

异步:可以在新线程中执行任务,具备开启新线程的能力。

GCD中还有两个用来执行任务的函数

当我们的任务有依赖关系的时候,比如任务1和2执行完毕后才能执行任务3和4,这时候我们可以用到这个函数——栅栏函数。其中 queue 是队列,block 是任务。

提交一个栅栏函数在执行中,它会等待栅栏函数执行完再去执行下一行代码(注意是下一行代码),同步栅栏函数是在主线程中执行的

dispatch_barrier_sync(dispatch_queue_t queue, dispatch_block_t blcok);

提交一个栅栏函数在异步执行中,它会立马返回开始执行下一行代码(不用等待任务执行完毕)

dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t blcok);

共同点

1、都会等待在它前面插入队列的任务(1、2、3)先执行完

2、都会等待他们自己的任务(barrier)执行完再执行后面的任务(4、5、6)(注意这里说的是任务不是下一行代码)

不同点

1、dispatch_barrier_sync需要等待自己的任务(barrier)结束之后,才会继续添加并执行写在barrier后面的任务(4、5、6),然后执行后面的任务2、dispatch_barrier_async将自己的任务(barrier)插入到queue之后,不会等待自己的任务结束,它会继续把后面的任务(4、5、6)插入到queue,然后执行任务。

情景分析:

同步栅栏添加进入队列的时候,当前线程会被锁死,直到同步栅栏之前的任务和同步栅栏任务本身执行完毕时,当前线程才会打开然后继续执行下一句代码。

注意:

在使用栅栏函数时.使用自定义队列才有意义,如果用的是串行队列或者系统提供的全局并发队列,这个栅栏函数

相关文章

  • GCD栅栏函数, 快速迭代和调度组的使用

    今天介绍几个比较重要的GCD函数: GCD栅栏函数: 同步栅栏函数: 会发生阻塞 异步栅栏函数: 不会发生阻塞 栅...

  • 栅栏函数

    GCD中有两个用来执行任务的常用函数 用同步方法执行任务,其中 queue 是队列,block 是任务 dispa...

  • 栅栏函数

    需要用自定义并发队列 dispatch_barrier_sync(queue,void(^block)())会将q...

  • 多线程之GCD栅栏函数,GCD快速迭代,队列组

    1. GCD栅栏函数 作用:只有当栅栏函数执行完毕后才能执行后面的函数 需求:使用栅栏函数规定线程执行顺序 注意点...

  • GCD的栅栏函数

    作用:只有当栅栏函数执行完毕后才能执行后面的函数 需求:使用栅栏函数规定线程执行顺序 注意点:栅栏函数不能使用全局...

  • 多线程网络02

    1 GCD栅栏函数 栅栏函数用户控制队列里异步函数的的执行顺序。注:栅栏函数不能使用全局并发队列,需要用自己创建的...

  • iOS 栅栏函数学习

    作用很形象的类似于栅栏,栅栏前面的任务完成之后接着执行栅栏函数中添加的任务,最后执行栅栏后面的任务; 栅栏函数只有...

  • iOS-GCD常用函数和栅栏函数

    GCD常用函数 GCD栅栏函数

  • 栅栏函数与迭代函数

    一, 栅栏函数 二,迭代函数

  • 多线程二

    GCD 栅栏函数 dispatch_barrier_async 控制任务执行顺序,同步 保证线程安全 栅栏函数只能...

网友评论

      本文标题:栅栏函数

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