您的位置:首页 > 产品设计 > UI/UE

iOS 多线程处理之栅栏函数和依赖(NSoperationQueue,GCD)

2018-04-02 16:15 239 查看
1,NSoperationQueue处理A,B,C三个线程,要求执行完A,B后才能执行C。
添加依赖关系,代码:- (void)operation {

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

NSBlockOperation *A = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"A----%@",[NSThread currentThread]);
}];

NSBlockOperation *B = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"B---%@",[NSThread currentThread]);
}];

NSBlockOperation *C = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"C---%@",[NSThread currentThread]);
}];

[C addDependency:A];
[C addDependency:B];

[queue addOperation:A];
[queue addOperation:B];
[queue addOperation:C];

}
2,使用GCD的栅栏函数或者队列组
- (void)combineImages {
/*
1,开启两个线程处理A和B
2,通过任务组执行A,B之后执行C
*/
dispatch_queue_t queue = dispatch_queue_create("dealWith", DISPATCH_QUEUE_CONCURRENT);
dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue, ^{
NSLog(@"A----%@",[NSThread currentThread]);
});

dispatch_group_async(group, queue, ^{
NSLog(@"B---%@",[NSThread currentThread]);
});

dispatch_group_notify(group, queue, ^{
NSLog(@"C---%@",[NSThread currentThread]);
});

}
3,GCD添加栅栏函数- (void)GCDasyn {

//栅栏函数(栅栏函数不能用全局并发队列)
//等执行完栅栏函数中的代码蔡继续执行下面的代码

dispatch_queue_t queue = dispatch_queue_create("dealWith", DISPATCH_QUEUE_CONCURRENT);

dispatch_barrier_async(queue, ^{
NSLog(@"A----%@",[NSThread currentThread]);
});

dispatch_barrier_async(queue, ^{
NSLog(@"B---%@",[NSThread currentThread]);
});

dispatch_async(queue, ^{
NSLog(@"C---%@",[NSThread currentThread]);
});

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