美文网首页
dispatch_barrier_async函数

dispatch_barrier_async函数

作者: AndyYaWei | 来源:发表于2017-07-26 09:51 被阅读0次

代码

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作为流程控制的一种方式当然是用在并行环境当中啦。串行队列中的任务会按照被添加进去先后次序执行。

相关文章

网友评论

      本文标题: dispatch_barrier_async函数

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