美文网首页
iOS GCD 控制并发数量

iOS GCD 控制并发数量

作者: 风___________ | 来源:发表于2019-11-04 18:43 被阅读0次

使用

// 控制最高并发树量为18
dispatch_queue_t seedQueue = dispatch_queue_create("seed_run_Queue",  DISPATCH_QUEUE_CONCURRENT);
    dispatch_asyn_limit_count(seedQueue,18, ^{
        [self deCodingAsyncWithData:resData AndSuccess:success AndFailure:failure];
    });

实现

void dispatch_asyn_limit_count(dispatch_queue_t queue,long count, dispatch_block_t block){
    //控制并发数的信号量
    static dispatch_semaphore_t limitSemaphore;
    //专门控制并发等待的线程
    static dispatch_queue_t receiveQueue;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        limitSemaphore = dispatch_semaphore_create(count);
        receiveQueue = dispatch_queue_create("decoding_seed", DISPATCH_QUEUE_SERIAL);
    });
    dispatch_async(receiveQueue, ^{
        //若信号量小于0,则会阻塞receiveQueue的线程,控制添加到queue里的任务不会超过count个。
        dispatch_semaphore_wait(limitSemaphore, DISPATCH_TIME_FOREVER);
        dispatch_async(queue, ^{
            if (block) {
                block();
            }
            dispatch_semaphore_signal(limitSemaphore);//block执行完后增加信号量
        });
    });
}

另一种实现

// 控制并发数量
void dispatch_asyn_limit_count(long count, dispatch_block_t block){
    //控制并发数的信号量
    static dispatch_semaphore_t limitSemaphore;
    static dispatch_queue_t receiveQueue;
    // 单利初始化
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        limitSemaphore = dispatch_semaphore_create(count);
        receiveQueue = dispatch_queue_create("decoding_seed", DISPATCH_QUEUE_SERIAL);
    });
    dispatch_async(receiveQueue, ^{
        //若信号量小于0,则会阻塞receiveQueue的线程,控制添加到queue里的任务不会超过count个。
        dispatch_semaphore_wait(limitSemaphore, DISPATCH_TIME_FOREVER);
        if (block) block();
        dispatch_semaphore_signal(limitSemaphore);//block执行完后增加信号量
    });
}

相关文章

  • iOS GCD 控制并发数量

    使用 实现 另一种实现

  • GCD 文章理解

    GCD详解 1,GCD如何控制线程的最大并发数? (1,通过信号量的大小控制线成并发执行的数量) (2,一定数量的...

  • iOS多线程控制最大并发数

    iOS多线程最常用是GCD和NSOperation。一般简单的异步任务直接使用GCD,需要控制最大并发数和控制状态...

  • GCD进阶

    GCD 控制线程数量 GCD 不像NSOperation 那样有直接提供线程数量控制方法,但是通过GCD的sema...

  • iOS开发多线程之GCD

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 GCD...

  • GCD控制线程数量

    1.GCD控制线程数量 2.GCD控制线程数量+线程任务结束通知处理

  • iOS开发之GCD并发队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 03 ...

  • iOS开发之GCD同步任务加强

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 004...

  • iOS开发之GCD串行队列

    iOS开发多线程之GCDiOS开发之GCD同步任务加强iOS开发之GCD串行队列iOS开发之GCD并发队列 实例d...

  • iOS 并发机制

    ios 并发机制(一) —— GCD中的信号量及几个重要函数ios 并发机制(二) —— NSOperation实...

网友评论

      本文标题:iOS GCD 控制并发数量

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