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

时间: 2024-11-07 06:44:25

GCD之barrier的相关文章

《GCD 实现同步锁》-07-多线程

@MicroCai 2015-03-03 23:18 字数 6539 阅读 202 Effective Objective-C Notes:GCD 实现同步锁 Archives iOS <Effective Objective-C Notes>系列博文整理自<Effective Objective-C 2.0> 如果您觉得我的博客对您有帮助,请通过关注我的新浪微博  MicroCai 支持我,谢谢! 本文名为<GCD 实现同步锁>,内容不止于锁.文章试图通过 GCD 同

给iOS开发者的GCD用户手册

Grand Central Dispatch,或者GCD,是一个极其强大的工具.它给你一些底层的组件,像队列和信号量,让你可以通过一些有趣的方式来获得有用的多线程效果.可惜的是,这个基于C的API是一个有点神秘,它不会明显的告诉你如何使用这个底层组件来实现更高层次的方法.在这篇文章中,我希望描述那些你可以通过GCD提供给你的底层组件来实现的一些用法. 后台工作 也许最简单的用法,GCD让你在后台线程上做一些工作,然后回到主线程继续处理,因为像那些属于 UIKit 的组件只能(主要)在主线程中使用

iOS 多线程编程gcd全面系统认识

这两天在看<OC高级编程-多线程编程和内存管理>日本人写的那本,该书对arc,block和gcd有了更深层次的解读,非常不错.现在总结一下gcd相关的知识.有关arc和block的参考arc   参考block 网上很多博客都对gcd有过讲解,很多是对gcd的全局队列,主线程队列,创建队列等等,做了单方面的描述,不是很全面系统.下面我们将学习一下系统得gcd.本文主要分为下面几个要点,前几个好点比较好理解,最后可能理解起来有些费劲! ● 什么是gcd,iOS为什么要用多线程 ● 创建线程,序列

在Swift中应用Grand Central Dispatch(上)

本文翻译自raywenderlich,原文:Grand Central Dispatch Tutorial for Swift: Part 1/2尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在Swift世界中很刺眼. 在这两篇教程中,你会学到GCD的来龙去脉.第一部分解释了GCD可以做什么和几个基本功能.第二部分,你会学到一些GCD所提供的进阶功能. 起步 libdispa

转 Grand Central Dispatch 基础教程:Part 1/2 -swift

本文转载,原文地址:http://www.cocoachina.com/ios/20150609/12072.html 原文 Grand Central Dispatch Tutorail for Swift: Part 1/2 原文作者:Bjrn Olav Ruud 译者:Ethan Joe 尽管Grand Central Dispatch(以下简称为GCD)已推出一段时间了,但并不是所有人都明白其原理:当然这是可以理解的,毕竟程序的并发机制很繁琐,而且基于C的GCD的API对于Swift的新

在Swift中应用Grand Central Dispatch(上)转载自的goldenfiredo001的博客

尽管Grand Central Dispatch(GCD)已经存在一段时间了,但并非每个人都知道怎么使用它.这是情有可原的,因为并发很棘手,而且GCD本身基于C的API在 Swift世界中很刺眼. 在这两篇教程中,你会学到GCD的来龙去脉.第一部分解释了GCD可以做什么和几个基本功能.第二部分,你会学到一些GCD所提供的进阶功能. 起步 libdispatch 是Apple所提供的在IOS和OS X上进行并发编程的库,而GCD正是它市场化的名字.GCD有如下优点: – GCD可以将计算复杂的任务

转 GCD

GCD 深入理解:第一部分 本文翻译自 http://www.raywenderlich.com/60749/grand-central-dispatch-in-depth-part-1 原作者:Derek Selander 译者:@nixzhu 虽然 GCD 已经出现过一段时间了,但不是每个人都明了其主要内容.这是可以理解的:并发一直很棘手,而 GCD 是基于 C 的 API ,它们就像一组尖锐的棱角戳进 Objective-C 的平滑世界.我们将分两个部分的教程来深入学习 GCD . 在这两

GCD那些事儿

GCD GCD,全名Grand Central Dispatch,中文名郭草地,是基于C语言的一套多线程开发API,一听名字就是个狠角色,也是目前苹果官方推荐的多线程开发方式.可以说是使用方便,又不失逼格.总体来说,他解决我提到的上面直接操作线程带来的难题,它自动帮你管理了线程的生命周期以及任务的执行规则.下面我们会频繁的说道一个词,那就是任务,说白了,任务其实就是你要执行的那段代码. 任务管理方式--队列 上面说当我们要管理多个任务时,线程开发给我们带来了一定的技术难度,或者说不方便性,GCD

对GCD的一些理解和实践

GCD GCD,全程Grand Central Dispatch,是苹果为了多核并行提出的解决方案.它是使用C语言实现,但是由于用了block来处理回调,所以使用起来十分方便.并且GCD会自动管理线程的生命周期,不需要我们去管理. 任务和队列 GCD中有两个重要的概念,任务和队列. 1.任务,就是我们想要处理的事情,任务可以分为同步执行和异步执行: 同步(sync):使用dispatch_sync(dispatch_queue_t queue, dispatch_block_t block) 创