GCD之barrier

简介:

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执行完毕后再执行它,而它后面的则在它执行完再执行。


相关文章
|
5月前
GCD与NSThread的区别
GCD与NSThread的区别
230 65
gcd 使用
http://blog.sina.com.cn/s/blog_7b9d64af0101c75e.html
624 0
|
网络性能优化 Swift Go
|
API
|
监控 安全 API
|
安全 API 调度
GCD
什么是 GCD ? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯 C 语言,提供了非常多强大的函数 GCD的优势: GCD 是苹果公司为多核的并行运算提出的解决方案; GCD 会自动利用更多的 CPU 内核(比如...
1011 0
|
缓存 iOS开发
iOS多线程GCD
Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法。 dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取。
882 0
|
移动开发 调度
GCD总结(一)
GCD为我们提供了三种类型的调度队列(dispatch queue),分别为串行,并行和主调度队列。     串行(Serial)     你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。
582 0

热门文章

最新文章