dispatch barrier async/sync异同点

前言

  • 我们之前大多数都接触过dispatch_barrier_async,这也是GCD提供的解决数据竞争的一种方式,常称作异步栅栏
  • 也常通过pthread_rwlock读写锁,来解决数据竞争问题
  • 当然,还有很多方式。本文不再讨论如何使用,具体使用大家自行google,而是简洁的讲下dispatch_barrier_async和dispatch_barrier_sync两者的区别,后者可能被很多人都遗忘了

dispatch_barrier_async

  • 提交的block,插入到队列后就直接返回
  • 提交的block前后的block都按照顺序插入到队列中,执行顺序按照前-barrier-后。
  • 注意:这里的执行顺序是同一个队列的任务,如果提交的不是同一个队列,那么barrier的执行顺序对其是无影响

dispatch_barrier_sync

  • 只提交barrier和barrier之前的block
  • queue等待barrier之前的block执行完,再执行barrier的block,执行完才返回
  • 注意:这个阻塞,同时会阻塞一些不是添加到同一队列的任务,因为阻塞导致无法提交,得不到执行

异同

共同点
  • 等待前面插入同一队列的任务执行完
  • 等待barrier执行完,才执行同一Queue之后的任务
不同点
  • sync:自身插入执行完,才返回,插入后续的任务
  • async:自身插入,不等待执行完,继续插入后续的任务。等待自身执行完,才执行后续的任务

不等待

aync的不等待(异步)特性体现在将任务插入到队列的过程,它的阻塞等待特性体现在任务真正执行的过程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值