美文网首页
IOS线程中使用依赖的2种方法

IOS线程中使用依赖的2种方法

作者: 开米肉丝酱 | 来源:发表于2018-04-08 15:31 被阅读0次

    业务中,我们往往需要在业务逻辑中使用线程的依赖 比如A业务要等B和C等线程处理完毕之后再去执行 以下就是线程间使用依赖的2种方法

    第二种 使用NSOperation实现

    //Operation实现线程依赖
    
    NSOperationQueue * queue = [[NSOperationQueue alloc]init];
    
    NSOperation * q1 = [NSBlockOperation blockOperationWithBlock:^{
        sleep(1);
        NSLog(@"测试");
    } ];
    
    NSOperation * q2 = [NSBlockOperation blockOperationWithBlock:^{
        sleep(2);
        NSLog(@"这是一个");
    }];
    
    NSOperation * q3 = [NSBlockOperation blockOperationWithBlock:^{
        sleep(3);
        NSLog(@"线程依赖");
    }];
    
    [q1 addDependency:q3];
    [q3 addDependency:q2];
    
    [queue addOperation:q1];
    [queue addOperation:q2];
    [queue addOperation:q3];
    

    第二种 使用GCD实现

    //GCD 实现线程依赖
    dispatch_semaphore_t sephore1 = dispatch_semaphore_create(0);
    dispatch_semaphore_t sephore2 = dispatch_semaphore_create(0);
    
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSLog(@"这是一个");
        dispatch_semaphore_signal(sephore1);
    });
    
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        dispatch_semaphore_wait(sephore1, DISPATCH_TIME_FOREVER);
        NSLog(@"线程依赖");
        dispatch_semaphore_signal(sephore2);
    });
    
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        dispatch_semaphore_wait(sephore2, DISPATCH_TIME_FOREVER);
        NSLog(@"测试");
    });
    

    两种方法综合下来 NSOperation 代码简单易读 操作性强 GCD 是NSOperation的底层 所以在线程性能上要好,特别如果是大量计算的线程依赖GCD性能会好一些。

    相关文章

      网友评论

          本文标题:IOS线程中使用依赖的2种方法

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