浅析dispatch_barrier_async

在并行队列中,为了保持某些任务完成的顺序,需要等待一些任务完成后才能继续进行,使用barrier来等待之前任务完成,避免数据竞争等问题。

使用函数dispatch_barrier_async函数会等待追加到Concurrent Dispatch Queue并行对列中的操作全部执行完之后,然后再执行dispatch_barrier_async函数追加的处理,等dispatch_barrier_async追加的处理执行结束之后,Concurrent Dispatch Queue才恢复之前的动作继续执行。

(注意:)使用dispatch_barrier_async,该函数只能搭配自定义并行对列dispatch_queue_t使用。不能使用: dispatch_get_global_queue,否则dispatch_barrier_async的作用和dispatch_async的作用一模一样.

一般情况下,选择使用GCD的dispatch_after.

但是dispatch_after有个致命的弱点:dispatch_after一旦执行后,就不能撤销了。而performSelector可以使用cancelPreviousPerformRequestWithTarger方法撤销,NSTimer也可以调用invalidate进行撤销.

具体解决方法:

 

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    

    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);

    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 2.0*NSEC_PER_SEC, 0.1*NSEC_PER_SEC);

        dispatch_source_set_event_handler(timer, ^{

    });

    dispatch_resume(timer);

    dispatch_source_cancel(timer);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值