iOS 按顺序异步执行线程

GCD方式,关键是信号量的三个重要用法:
创建信号量为0dispatch_semaphore_t sema = dispatch_semaphore_create(0);
进入信号量dispatch_semaphore_signal(sema);这里请求信号量 +1 为1
等待信号量dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);走到这里如果信号量为0 则不再执行下面的代码 一直等待 信号量不是0 出现 才会执行下面代码,然后信号量为 - 1

//创建线程池
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    
    //创建group
    dispatch_group_t group = dispatch_group_create();
    //创建信号量
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    
    for (int i = 0; i < 10; i++) {
        dispatch_group_async(group, queue, ^{
            NSLog(@"task%i",i);
            //进入信号量
            dispatch_semaphore_signal(sema);
        });
        //等待信号量
        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
    }
//结束后
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        dispatch_group_async(group, queue, ^{
            NSLog(@"task11");
            //进入信号量
        });
    });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容