美文网首页
为GCD并发队列设置最大并发数

为GCD并发队列设置最大并发数

作者: nick5683 | 来源:发表于2024-11-13 18:13 被阅读0次
// 创建一个信号量,初始值为3,表示同时最多允许3个任务并发执行
dispatch_semaphore_t semaphore = dispatch_semaphore_create(3);

// 创建一个dispatch group
dispatch_group_t group = dispatch_group_create();

// 创建一个全局并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 添加第一个任务到group
dispatch_group_async(group, queue, ^{
    dispatch_group_enter(group);
    // 等待信号量,如果信号量为0,则此任务将被阻塞
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    
    // 模拟任务执行时间
    for (int i = 0; i < 20; ++i) {
        [NSThread sleepForTimeInterval:2]; // 模拟耗时操作
        NSLog(@"Task 1 --- %@", [NSThread currentThread]); // 打印当前线程
    }
    
    // 任务完成后,释放信号量
    dispatch_semaphore_signal(semaphore);
    
    // 离开group
    dispatch_group_leave(group);
});

// 添加第二个任务到group
dispatch_group_async(group, queue, ^{
    dispatch_group_enter(group);
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    
    for (int i = 0; i < 20; ++i) {
        [NSThread sleepForTimeInterval:2]; // 模拟耗时操作
        NSLog(@"Task 2 --- %@", [NSThread currentThread]); // 打印当前线程
    }
    
    dispatch_semaphore_signal(semaphore);
    
    dispatch_group_leave(group);
});

// 添加第三个任务到group
dispatch_group_async(group, queue, ^{
    dispatch_group_enter(group);
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    
    for (int i = 0; i < 20; ++i) {
        [NSThread sleepForTimeInterval:2]; // 模拟耗时操作
        NSLog(@"Task 3 --- %@", [NSThread currentThread]); // 打印当前线程
    }
    
    dispatch_semaphore_signal(semaphore);
    
    dispatch_group_leave(group);
});

// 等待所有任务完成
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    // 所有文件都下载完成,执行这里的代码
    NSLog(@"Task 所有文件都下载完成 --- %@", [NSThread currentThread]); // 打印当前线程

});

相关文章

  • 为GCD并发队列设置最大并发数

    多线程原理(只有一个CPU的情况): 同一时间,CPU 只能处理1个线程,同一时间只有1个线程在执行; 多线程同时...

  • iOS-基础巩固-NSOperation

    NSBlockOperation GCD & NSOperation 对比 最大并发数 队列的取消、暂停、恢复 取...

  • iOS实录16:GCD小结之控制最大并发数

    导语:在GCD的使用中,需要考虑控制最大并发数 和 线程同步这两个问题,本文主要介绍GCD中如何控制最大并发数 。...

  • GCD队列使用

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

  • iOS多线程篇-NSOperation方法使用

    NSOperation-方法使用 一、并发数 简介(1)该属性控制队列是串行执行还是并发执行(2)如果最大并发数等...

  • 参数化的例子

    注意 队列的 queue.Queue() 数量必须大于或者等于最大并发数,否则最多并发数不准确

  • 信号量Semaphore

    异步并发控制线程数 dispatch_semaphore_create 设置最大并发数 dispatch_sema...

  • iOS 多线程

    GCD的队列可以分为2大类型 并发队列(Concurrent Dispatch Queue) 可以让多个任务并发(...

  • GCD

    串行队列和并行队列的区别是串行队列的最大并发量为1,若最大并发量为1,async会自动转成barrier_asyn...

  • GCD篇(1)

    GCD的队列有两种,一种是串行队列,一种是并发队列。 并行与并发的区别 并发(concurrency) 并行(pa...

网友评论

      本文标题:为GCD并发队列设置最大并发数

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