dispatch_barrier_async

代码:

dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_CONCURRENT);

dispatch_async(queue, ^{
    NSLog(@"Before Barrier Block - 1");
});
dispatch_async(queue, ^{
    NSLog(@"Before Barrier Block - 2");
});
dispatch_async(queue, ^{
    NSLog(@"Before Barrier Block - 3");
});
dispatch_async(queue, ^{
    NSLog(@"Before Barrier Block - 4");
});
dispatch_async(queue, ^{
    NSLog(@"Before Barrier Block - 5");
});

dispatch_barrier_async(queue, ^{
    NSLog(@"Barrier Block");
});

dispatch_async(queue, ^{
    NSLog(@"After Barrier Block - 1");
});
dispatch_async(queue, ^{
    NSLog(@"After Barrier Block - 2");
});
dispatch_async(queue, ^{
    NSLog(@"After Barrier Block - 3");
});
dispatch_async(queue, ^{
    NSLog(@"After Barrier Block - 4");
});
dispatch_async(queue, ^{
    NSLog(@"After Barrier Block - 5");
}); 

可能的输出:

Before Barrier Block - 1
Before Barrier Block - 2
Before Barrier Block - 3
Before Barrier Block - 5
Before Barrier Block - 4
Barrier Block
After Barrier Block - 1
After Barrier Block - 3
After Barrier Block - 2
After Barrier Block - 5
After Barrier Block - 4

备注:

dispatch_barrier_async用于在同一个并发队列中,同步多个并发操作

时间: 2024-08-07 04:15:17

dispatch_barrier_async的相关文章

dispatch_barrier_async的使用

dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行. 在如下场景: 在访问数据操作时,可以并行读取,因此这种操作应该放到concurrent Dispatch Queue中,写入操作是在任何读取操作执行之前,放到serial Dispatch Queue,在写入处理结束之前,读取处理操作不可进行. 此时使用dispatch_barrier_async和dispatch_group配合可以很好的解决这个问题. 示例: [NSThr

GCD中的dispatch_barrier_async函数的使用(栅栏函数)

<一>什么是dispatch_barrier_async函数 毫无疑问,dispatch_barrier_async函数的作用与barrier的意思相同,在进程管理中起到一个栅栏的作用,它等待所有位于barrier函数之前的操作执行完毕后执行,并且在barrier函数执行之后,barrier函数之后的操作才会得到执行,该函数需要同dispatch_queue_create函数生成的concurrent Dispatch Queue队列一起使用 <二>dispatch_barrier

转 GCD

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

个人总结------高级知识点必会

高级知识点之必会 共44题 1.OC中创建线程的方法是什么?如果指定在主线程中执行代码?如何延时执行代码.[难度系数★★] 1)创建线程的方法 NSThread NSOperationQueue和NSOperation GCD 2)主线程中执行代码 [self performSelectorOnMainThread:withObject: waitUntilDone:]; [self performSelector: onThread:[NSThreadmainThread] withObjec

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) 创

iOS进阶学习-多线程

一.多线程概述 1.程序,进程,线程 程序:由源代码生成的可执行应用.(例如:QQ.app) 进程:一个正在运行的程序可以看做一个进程.(例如:正在运行的QQ就是一个进程),进程拥有独立运行所需的全部资源. 线程:程序中独立运行的代码段.(例如:接收QQ消息的代码) 一个进程是由一或多个线程组成.进程只负责资源的调度和分配,线程才是程序真正的执行单元,负责代码的执行. 2.单线程 每个正在运行的程序(即进程),至少包含一个线程,这个线程叫主线程. 主线程在程序启动时被创建,用于执行main函数.

《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 同

GCD深入了解

一.GCD应用 单例模式 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"执行一次%@",[NSThread currentThread]); }); 二延迟操作 //1. NSLog(@"开始执行"); //    [self performSelector:@selector(handleAction) withObject:nil afterDelay:0];