IOS 多线程 顺序执行异步线程 GCD

1.当异步执行的是同步执行

    dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_enter(group);

    dispatch_group_async(group, globalQueue, ^{

        sleep(1);

        NSLog(@"------------1");

        dispatch_group_leave(group);

    });

    dispatch_group_enter(group);

    dispatch_group_async(group, globalQueue, ^{

        sleep(1);

        NSLog(@"------------2");

        dispatch_group_leave(group);

    });

    dispatch_group_enter(group);

    dispatch_group_async(group, globalQueue, ^{

        sleep(1);

        NSLog(@"------------3");

        dispatch_group_leave(group);

    });

    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);///一直等待完成

    dispatch_group_notify(group, globalQueue, ^{

        NSLog(@"执行完成");

    });

2.当异步执行的是网络请求或另一个异步需要用dispatch_group_t、dispatch_queue_t、dispatch_semaphore_t才能实现异步执行

//使用GCD的信号量 dispatch_semaphore_t 创建同步请求

    dispatch_group_t group =dispatch_group_create();

    dispatch_queue_t globalQueue=dispatch_get_global_queue(0, 0);

    dispatch_group_async(group, globalQueue, ^{

        dispatch_semaphore_t semaphore= dispatch_semaphore_create(0);

        //模拟网络多线程耗时操作

        dispatch_group_async(group, globalQueue, ^{

            sleep(3);

            NSLog(@"%@---block1结束。。。",[NSThread currentThread]);

            dispatch_semaphore_signal(semaphore);

        });

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

        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    });

    dispatch_group_async(group, globalQueue, ^{

        dispatch_semaphore_t semaphore= dispatch_semaphore_create(0);

        //模拟网络多线程耗时操作

        dispatch_group_async(group, globalQueue, ^{

            sleep(3);

            NSLog(@"%@---block2结束。。。",[NSThread currentThread]);

            dispatch_semaphore_signal(semaphore);

        });

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

        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    });

    dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{

        NSLog(@"%@---全部结束。。。",[NSThread currentThread]);

    });

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容