dispatch_barrier_async函数

写篇文章实践一下这个函数 .

    dispatch_queue_t concurrentQueue = dispatch_queue_create("my.concurrent.queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(concurrentQueue, ^(){
        NSLog(@"dispatch-1");
    });
    dispatch_async(concurrentQueue, ^(){
        NSLog(@"dispatch-2");
    });
//    dispatch_barrier_async(concurrentQueue, ^(){
//        NSLog(@"dispatch-barrier");
//    });
    dispatch_async(concurrentQueue, ^(){
        NSLog(@"dispatch-3");
    });
    dispatch_async(concurrentQueue, ^(){
        NSLog(@"dispatch-4");
    });
首先执行这段代码,并行队列里面异步4个任务。那么4个任务完成的先后是无法保证的。

如果加入被注释掉的那段代码,加入了barrier,那么在并行队列中的1234 4个任务的完成次序如何?

我跑了几次代码,最终结果都有两个相同点,1:34任务必定在12任务同时完成之后才被执行。2:12,34之间的执行次序不定

代码的第一行  DISPATCH_QUEUE_CONCURRENT 代表这个queue 是并发性质的。

假设我换成串行的。看看神马结果。。

结果是每次执行顺序都是1234,有没有barrier 都无关,很明显,barrier作为流程控制的一种方式当然是用在并行环境当中啦。串行队列中的任务会按照被添加进去先后次序执行。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值