您的位置:首页 > 其它

关于线程依赖问题的解决

2017-03-08 10:43 901 查看
一,理解

并发:同一时间间隔内运行多个线程

并行:不同的CPU同时运行各自的线程,也就是同一时刻多个线程同时进行。

在此仅介绍两个

GCD

//dispatch_semaphore : 信号量

//dispatch_semapore_create:  创建信号量

//dispatch_semaphore_signal: 发送通知

//dispatch_semaphore_wait  : 等待信号量

运行代码

-(void)testGCD

{

    @autoreleasepool {

        //创建信号量

        __block
dispatch_semaphore_t sem =
dispatch_semaphore_create(0);

        

        //创建一个队列

        dispatch_queue_t queue =
dispatch_queue_create("testBook",
NULL);

        

        //开启一个异步线程

        dispatch_async(queue, ^{

            for (int a=0; a<5;
a++) {

                NSLog(@"a = %d",a);

            }

            //发送信号量

            dispatch_semaphore_signal(sem);

        });

        

        

        

        //接受信号量

        dispatch_semaphore_wait(sem,
DISPATCH_TIME_FOREVER);

        for (int b=0; b<5;
b++) {

            NSLog(@"b = %d",b);

        }

    }

}

结果描述



NSOperation

运行代码

//NSOperation

-(void)testOperation

{

    //创建队列

    NSOperationQueue *queue = [[NSOperationQueue
alloc]init];

   
//设置队列最大线程数

    queue.maxConcurrentOperationCount =
5;

    //创建线程A

    NSBlockOperation *operationA = [NSBlockOperation
blockOperationWithBlock:^{

        for (int c=0; c<5;
c++) {

            NSLog(@"c = %d",c);

        }

    }];

    //创建线程B

    NSBlockOperation *operationB = [NSBlockOperation
blockOperationWithBlock:^{

        for (int d=0; d<5;
d++) {

            NSLog(@"d = %d",d);

        }

    }];

    //设置线程依赖

    [operationA addDependency:operationB];

   
//将线程加入队列

    [queue addOperation:operationA];

    [queue addOperation:operationB];

}

运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐