码迷,mamicode.com
首页 > 其他好文 > 详细

GCD之barrier

时间:2015-03-30 20:20:57      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

1.在并行队列执行任务中,如果想让某一个任务先执行完后再执行其后面的任务,此时可以用dispatch_barrier_async,下图是dispatch_barrier_async函数的处理流程。

技术分享

2.下面用代码体检一下

 dispatch_queue_t queue=dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT);
    dispatch_apply(5, queue, ^(size_t index) {
        NSLog(@"%ld",index);
    });
    dispatch_async(queue, ^{
        NSLog(@"a");
    });
//    dispatch_barrier_async(queue, ^{
//        NSLog(@"a");
//    });
    dispatch_apply(5, queue, ^(size_t index) {
        NSLog(@"%ld 1",index);
    });

 3.当不采用dispatch_barrier_async时,输出结果如下:

技术分享

4.当采用dispatch_barrier_async时,输出结果如下:

技术分享

5.总结

可以看到输出结果的不同,当不采用时a输出可以在它自身任务的后面,采用时也不会出现这样的情况。所以能说明是在并行队列中添加该函数,则会在它前面的block执行完毕后再执行它,而它后面的则在它执行完再执行。

GCD之barrier

标签:

原文地址:http://www.cnblogs.com/cuiyw/p/4378702.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!