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]);

    });

你可能感兴趣的:(IOS 多线程 顺序执行异步线程 GCD)