美文网首页
初识 GCD 中的 dispatch_barrier_asyn

初识 GCD 中的 dispatch_barrier_asyn

作者: Seimda | 来源:发表于2016-12-27 21:23 被阅读0次

void
dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);

提交一个异步执行的代码块到队列中执行

它有2个参数:queue为dispatch_barrier_async 作用的队列,block 为进入此队列执行的代码块

值得注意的是:dispatch_barrier_async 函数只有在 DISPATCH_QUEUE_CONCURRENT 队列中才起作用,在全局并发队列 dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 中无效

dispatch_barrier_async 效果类似 dispatch_async,区别就是中间多了一个barrier,barrier顾名思义就是屏障的意思,将队列一分为2,前面的代码执行完才能执行dispatch_barrier_async中的任务,最后执行队列后的任务

例如

  dispatch_queue_t concurrent_queue = dispatch_queue_create("concurrent_queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(concurrent_queue, ^(){
        NSLog(@"task-1--%@",[NSThread currentThread]);
        
    });
    dispatch_async(concurrent_queue, ^(){
        NSLog(@"task-2--%@",[NSThread currentThread]);
    });
    dispatch_async(concurrent_queue, ^(){
        NSLog(@"task-3--%@",[NSThread currentThread]);
    });
    dispatch_barrier_sync(concurrent_queue, ^(){
        NSLog(@"dispatch_barrier_async--%@",[NSThread currentThread]);
    });
    dispatch_async(concurrent_queue, ^(){
        NSLog(@"task-4--%@",[NSThread currentThread]);
    });
    dispatch_async(concurrent_queue, ^(){
        NSLog(@"task-5--%@",[NSThread currentThread]);
    });
    dispatch_async(concurrent_queue, ^(){
        NSLog(@"task-6--%@",[NSThread currentThread]);
    });

使用dispatch_barrier_async

2016-12-26 22:29:13.983 GCD[1443:100483] task-1--<NSThread: 0x7f8cc1d755d0>{number = 4, name = (null)}
2016-12-26 22:29:13.983 GCD[1443:100491] task-3--<NSThread: 0x7f8cc1e07960>{number = 3, name = (null)}
2016-12-26 22:29:13.983 GCD[1443:100472] task-2--<NSThread: 0x7f8cc1f01450>{number = 2, name = (null)}
2016-12-26 22:29:13.984 GCD[1443:100472] dispatch_barrier_async--<NSThread: 0x7f8cc1f01450>{number = 2, name = (null)}
2016-12-26 22:29:13.984 GCD[1443:100472] task-4--<NSThread: 0x7f8cc1f01450>{number = 2, name = (null)}
2016-12-26 22:29:13.984 GCD[1443:100483] task-6--<NSThread: 0x7f8cc1d755d0>{number = 4, name = (null)}
2016-12-26 22:29:13.984 GCD[1443:100491] task-5--<NSThread: 0x7f8cc1e07960>{number = 3, name = (null)}

使用dispatch_barrier_sync

2016-12-26 22:20:27.318 GCD[1420:95930] task-2--<NSThread: 0x7fad53d3faf0>{number = 3, name = (null)}
2016-12-26 22:20:27.318 GCD[1420:95919] task-1--<NSThread: 0x7fad53c1c360>{number = 2, name = (null)}
2016-12-26 22:20:27.318 GCD[1420:95936] task-3--<NSThread: 0x7fad53f01c90>{number = 4, name = (null)}
2016-12-26 22:20:27.319 GCD[1420:95836] dispatch_barrier_sync--<NSThread: 0x7fad53d07de0>{number = 1, name = main}
2016-12-26 22:20:27.320 GCD[1420:95936] task-4--<NSThread: 0x7fad53f01c90>{number = 4, name = (null)}
2016-12-26 22:20:27.320 GCD[1420:95930] task-6--<NSThread: 0x7fad53d3faf0>{number = 3, name = (null)}
2016-12-26 22:20:27.320 GCD[1420:95919] task-5--<NSThread: 0x7fad53c1c360>{number = 2, name = (null)}

task-1/2/3 和 task-4/5/6 分别并发执行,dispatch_barrier_async就像一座屏障,把1/2/3和4/5/6分隔开来,

dispatch_barrier_sync 与 dispatch_barrier_async 的区别则是同步和异步的区别,可以参照 dispatch_sync 和 dispatch_async

相关文章

  • 初识 GCD 中的 dispatch_barrier_asyn

    voiddispatch_barrier_async(dispatch_queue_t queue, dispat...

  • iOS GCD(三) dispatch_barrier_asyn

    iOS GCD (一) 任务+队列 基础组合iOS GCD (二 ) dispatch_group 队列组iO...

  • iOS GCD(三) dispatch_barrier_asyn

    我们有时需要异步执行两组操作,而且第一组操作执行完之后,才能开始执行第二组操作。这样我们就需要一个相当于 栅栏 一...

  • GCD初识

    什么是GCDGCD是牛逼的中枢调度器。它是纯C语言,提供了很多非常强大的函数 GCD的优势它是苹果公司为多核的并行...

  • GCD初相识

    GCD初识一 谈到iOS多线程,一般都会谈到四种方式:pthread、NSThread、GCD和NSOperati...

  • 一 GCD初识

    1.GCD基础概念(此笔记为学习Objective-C高级编程书中第三章所记录的相关知识点) gcd为异步执行任务...

  • iOS多线程-GCD之dispatch_barrier_asyn

    上一篇 iOS多线程-GCD之Dispatch Group 一、释义 dispatch_barrier_async...

  • iOS GCD初识.md

    串行队列 串行队列:操作是按顺序执行的,并且都在同一个线程上输出 一个串行队列对应只有一个线程,因此同时只能执行一...

  • GCD技术

    初识GCD 在我们平时的OC开发中经常需要用到多线程编程,而GCD这项技术是最受开发者喜爱的多线程技术,我们今天就...

  • iOS中的函数与队列

    本篇文章中我们主要讲解GCD中的函数。 GCD GCD是Grand Central Dispatch的简称,纯c语...

网友评论

      本文标题: 初识 GCD 中的 dispatch_barrier_asyn

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