美文网首页
多线程:group、栅栏、GCD 队列组的使用(异步并发变成串行

多线程:group、栅栏、GCD 队列组的使用(异步并发变成串行

作者: 东方诗空 | 来源:发表于2022-04-07 10:35 被阅读0次

思考:如何用gcd实现以下功能
异步并发执行任务1、任务2
等任务1、任务2都执行完毕后,再回到主线程执行任务3

使用:group

// 创建队列组
    dispatch_group_t group = dispatch_group_create();
    // 创建并发队列
    dispatch_queue_t queue = dispatch_queue_create("my_queue", DISPATCH_QUEUE_CONCURRENT);
    
    // 添加异步任务
    dispatch_group_async(group, queue, ^{
        for (int i = 0; i < 5; i++) {
            NSLog(@"任务1-%@", [NSThread currentThread]);
        }
    });
    
    dispatch_group_async(group, queue, ^{
        for (int i = 0; i < 5; i++) {
            NSLog(@"任务2-%@", [NSThread currentThread]);
        }
    });
    
    // 等前面的任务执行完毕后,会自动执行这个任务
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        for (int i = 0; i < 5; i++) {
            NSLog(@"任务3-%@", [NSThread currentThread]);
        }
    });

dispatch_group_notify(group, queue, ^{
        for (int i = 0; i < 5; i++) {
            NSLog(@"任务5-%@", [NSThread currentThread]);
        }
    });
    
    dispatch_group_notify(group, queue, ^{
        for (int i = 0; i < 5; i++) {
            NSLog(@"任务6-%@", [NSThread currentThread]);
        }
    });

dispatch_barrier_async 异步栅栏

这个函数传入的并发队列必须是自己通过dispatch_queue_cretate创建的
如果传入的是一个串行或是一个全局的并发队列,那这个函数便等同于dispatch_async函数的效果


image.png
 (void)viewDidLoad {
    [super viewDidLoad];

    self.queue = dispatch_queue_create("rw_queue", DISPATCH_QUEUE_CONCURRENT);

    for (int i = 0; i < 10; i++) {
        [self read];
        [self read];
        [self read];
        [self write];
    }
}


- (void)read {
    dispatch_async(self.queue, ^{
        sleep(1);
        NSLog(@"read");
    });
}

- (void)write
{
    dispatch_barrier_async(self.queue, ^{
        sleep(1);
        NSLog(@"write");
    });
}

相关文章

  • 多线程的运用

    同步串行队列 同步并发队列 异步串行队列 异步并发队列 队列组 栅栏 队列组和栅栏的组合 信号量 死锁主线程 分析...

  • 多线程:group、栅栏、GCD 队列组的使用(异步并发变成串行

    思考:如何用gcd实现以下功能异步并发执行任务1、任务2等任务1、任务2都执行完毕后,再回到主线程执行任务3 使用...

  • 多线程

    iOS中的几种多线程GCD1、GCD分为任务和队列,任务(同步,异步)队列(串行,并发),同步串行,同步主队列的情...

  • 关于GCD总结

    什么是GCD 理解串行、并发及同步异步 串行和并发 同步和异步 队列 串行队列 两者等效.2)使用主队列(在主队列...

  • 多线程 之 GCD

    1、同步和异步、并发队列和串行队列 一般在开发中,我们使用GCD比较的多,所以就按照GCD来详细解释一下多线程中的...

  • 关于iOS多线程--这些是你必须知道的

    pthread NSThread GCD1. 同步、异步、并发、串行讲解2. 创建队列的几种方式3. 栅栏函数4...

  • 2021--- GCD

    gcd同步,异步,串行队列,并发队列,全局队列,主队列,以及死锁。 1、gcd队列阻塞问题[https://www...

  • iOS GCD底层分析(3)--栅栏函数、信号量、调度组、事件源

    前言 上片文章分析了GCD队列和函数的使用方式、串行队列和并发队列的创建、同步函数和异步函数底层执行流程、串行队列...

  • GCD队列使用

    使用GCD前,先对队列总结一下: 串行和并发 GCD中队列分为两种:串行队列、并发队列。串行队列:任务按在队列里的...

  • iOS多线程

    GCD 同步/异步 和 串行/ 并发 dispatch_barrier_async dispatch_group ...

网友评论

      本文标题:多线程:group、栅栏、GCD 队列组的使用(异步并发变成串行

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