GCD栅栏

作者: 狗蛋的春天 | 来源:发表于2020-11-27 13:18 被阅读0次

需求: 有4个任务, 需要开启多条线程去执行。 有一个特殊任务0, 需要在1,2任务执行完后, 再执行3, 4任务。

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

dispatch_async(queue, ^{

    NSLog(@"-------1----%@",[NSThread currentThread]);

});

dispatch_async(queue, ^{

    NSLog(@"-------2----%@",[NSThread currentThread]);

});

//加入栅栏函数,执行任务0

dispatch_barrier_async(queue, ^{//不能使用全局队列

    NSLog(@"barrier");

});

dispatch_async(queue, ^{

    NSLog(@"-------3----%@",[NSThread currentThread]);

});

dispatch_async(queue, ^{

    NSLog(@"-------4----%@",[NSThread currentThread]);

});

栅栏函数: 拦截前面的并发任务, 等待栅栏函数执行完后 ,再执行后面的并发任务。

警告:栅栏函数不能使用全局队列(global_queue)

dispatch_barrier_async 与 dispatch_barrier_sync的区别:

同步栅栏函数会等待栅栏函数内的任务执行完,再执行后面的主线程或者子线程任务。

异步栅栏函数不会等待栅栏函数内任务执行完,就会执行后面主线程的任务。

异步栅栏函数不会阻塞主线程

相关文章

  • iOS-GCD常用函数和栅栏函数

    GCD常用函数 GCD栅栏函数

  • GCD栅栏

    需求: 有4个任务, 需要开启多条线程去执行。 有一个特殊任务0, 需要在1,2任务执行完后, 再执行3, 4任务...

  • GCD栅栏

    GCD栅栏 //GCD是基于C的,所有barrier是函数//GCD中的barrier函数有两种形式 //第一种 ...

  • GCD栅栏函数, 快速迭代和调度组的使用

    今天介绍几个比较重要的GCD函数: GCD栅栏函数: 同步栅栏函数: 会发生阻塞 异步栅栏函数: 不会发生阻塞 栅...

  • GCD-线程栅栏

    GCD的线程栅栏分为同步栅栏(dispatch_barrier_sync)和异步栅栏(dispatch_barri...

  • GCD

    1,GCD 栅栏方法:dispatch_barrier_async 2,GCD 延时执行方法:dispatch_a...

  • GCD栅栏函数

    // 栅栏函数在下面方法是不生效的. // dispatch_queue_t queen = dispatch_...

  • gcd栅栏函数

    栅栏函数之前的和之后的会分开执行,dispatch_barrier_async(<#dispatch_queue_...

  • GCD栅栏函数

    dispatch_barrier_async dispatch_barrier_sy...

  • gcd 栅栏函数

    1、当开发中,需要开启多个任务,同时需要控制前几个任务和后几个任务的顺序,该怎么办? 2、可以使用GCD的栅栏函数...

网友评论

    本文标题:GCD栅栏

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