前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发中在指定的某些线程执行完之后去执行其他线程

iOS开发中在指定的某些线程执行完之后去执行其他线程

作者头像
用户1451823
发布2018-09-13 15:06:08
1.1K0
发布2018-09-13 15:06:08
举报
文章被收录于专栏:DannyHoo的专栏DannyHoo的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337545

背景:

有四个线程A、B、C、D。

需求:

在A、B线程执行完之后去执行线程C、D。

实现方式:

GCD

1.利用GCD中的barrier

2.利用GCD中的group

代码语言:javascript
复制
2.1 利用在组中所有的线程执行完之后再去执行其他的线程

2.2 利用wait

代码:

barrier:

group相关代码:

// 全局变量group

代码语言:txt
复制
 dispatch\_group\_t group = dispatch\_group\_create(); 
代码语言:txt
复制
 // 并行队列 
代码语言:txt
复制
 dispatch\_queue\_t queue = dispatch\_get\_global\_queue(DISPATCH\_QUEUE\_PRIORITY\_DEFAULT, 0); 
代码语言:txt
复制
 // 进入组(进入组和离开组必须成对出现, 否则会造成死锁) 
代码语言:txt
复制
 dispatch\_group\_enter(group); 
代码语言:txt
复制
 dispatch\_group\_async(group, queue, ^{ 
代码语言:txt
复制
     // 执行异步任务1 
代码语言:txt
复制
     [NSThread sleepForTimeInterval:2]; 
代码语言:txt
复制
     for (int i = 0; i < 3; i ++) { 
代码语言:txt
复制
         NSLog(@”1—%@”,[NSThread currentThread ]);    // 子线程 
代码语言:txt
复制
     } 
代码语言:txt
复制
     \_str1 = @”str1”; 
代码语言:txt
复制
     dispatch\_group\_leave(group); 
代码语言:txt
复制
 });
代码语言:javascript
复制
// 进入组
dispatch_group_enter(group);
dispatch_group_async(group, queue, ^{
    // 执行异步任务2
    [NSThread sleepForTimeInterval:2];
    for (int i = 3; i < 6; i ++) {
        NSLog(@"2---%@",[NSThread currentThread ]);
    }
    _str2 = @"str2";
    dispatch_group_leave(group);

});
// wait
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

dispatch_async(dispatch_get_global_queue(0, 0), ^{
    NSLog(@"%@", [NSThread currentThread]);
    _str1 = @"str..";
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"%@", _str1);
        NSLog(@"%@", _str2);
        NSLog(@"%@", [NSThread currentThread]); // 主线程
    });
});

return;
dispatch_group_notify(group, queue, ^{  // 监听组里所有线程完成的情况

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
       NSLog(@"%@", [NSThread currentThread]);
        _str1 = @"str..";

        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"%@", _str1);
            NSLog(@"%@", _str2);
            NSLog(@"%@", [NSThread currentThread]); // 主线程
            NSLog(@"完成...");
        });

    });

});

demo地址:https://gitee.com/liangsenliangsen/dispatch_group

本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年01月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档