美文网首页
GCD的一道题

GCD的一道题

作者: 小赤焰 | 来源:发表于2021-09-27 10:44 被阅读0次
定义了两个变量和三个函数  要求func1循环n1次 func2循环n2次 之后调用func3.
如果能在一个异步函数中实现,额外加分
int n1 = arc4random() % 1000;
int n2 = arc4random() % 1000;

- (void)func1 {
    self.count++;
}
- (void)func2 {
    self.count--;
}
- (void)func3 {
    NSLog(@"a%d %d", __LINE__ ,self.count);
}

因为好久没碰iOS了,及其生疏 居然脑袋里一片空白 这明摆着dispatch_group啊
害,gcd组太好实现了,就不说了 看下怎么在一个异步函数中实现吧
其实用到了信号量 ,用信号量来拦截前两个异步任务 信号量恢复0后再去执行func3,重点其实在于第三个函数前的两个wait函数 一定要wait两次,才能拦截两个异步任务。
大胆猜测一下,系统的gcd组应该用的也是信号量吧 哈哈哈

dispatch_semaphore_t seam = dispatch_semaphore_create(2);
    dispatch_queue_t queue = dispatch_queue_create("lion", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(dispatch_get_main_queue(), ^{
        
        dispatch_semaphore_wait(seam, DISPATCH_TIME_FOREVER);
        dispatch_async(queue, ^{
            for (int i =0; i<n1; i++) {
                [self func1];
                NSLog(@"n1: %d", i);
                
            }
            dispatch_semaphore_signal(seam);
        });
        dispatch_semaphore_wait(seam, DISPATCH_TIME_FOREVER);
        dispatch_async(queue, ^{
            for (int i = 0; i < n2; i++) {
                [self func2];
                NSLog(@"n2: %d", i);
                
            }
            dispatch_semaphore_signal(seam);
        });
        
        dispatch_semaphore_wait(seam, DISPATCH_TIME_FOREVER);
        dispatch_semaphore_wait(seam, DISPATCH_TIME_FOREVER);
        [self func3];
        dispatch_semaphore_signal(seam);
        dispatch_semaphore_signal(seam);
    });

相关文章

  • GCD的一道题

    因为好久没碰iOS了,及其生疏 居然脑袋里一片空白 这明摆着dispatch_group啊害,gcd组太好实现了,...

  • 莫比乌斯反演-奇妙的欧拉

    让我们从一道题开始 求\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j),(n 首先对gcd...

  • 生活,干活,生生的干好答题这一道活。

    活好,什么意思? 生活,一道题,一道必选题。生活,一道题,一道必选题。 多为客观选择题,少为主观表述题。 客观少有...

  • 名牌大学生的成功

    我再多会做一道题, 再多会做另一道题, 再多会做另另一道题, 多会做的每一道题, 都是在为高考加分, 多学点,再多...

  • 无关爱情 - 恋爱就像一张考卷

    选择题 判断题 填空题 论证题 计算题 最后一道大题 你说 最后一道大题你不会 有点郁闷 我只会最后一道大题……

  • iOS开发——从一道题看Delegate

    iOS开发——从一道题看Delegate iOS开发——从一道题看Delegate

  • GCD分析题

    这道题的打印结果是什么形式? 分析:1.a=0进入while代码块,dispatch_async创建异步任务A放入...

  • 暮省

    今天做语文预习单的最后一道题。对我有很大的启发。我发现那道题不只是一道思考题题。而是一道关于人生的问题。当我...

  • 生活是什么?

    生活是什么?生活就是一道又一道的无解题!是语文题,是哲理题,是证明题!但不是数学题!因为数学题有唯一的答案!如果生...

  • 多做一点小努力 20220930 晨间日记

    人生的本质,它不是一道加法题,而是一道乘法题。 我们经常会觉得人生是一道加法题,你的财富需要每天朝九晚五工作好好积...

网友评论

      本文标题:GCD的一道题

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