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]);
});
}
添加依赖关系,代码:- (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]);
});
}
相关文章推荐
- GCD中的dispatch_barrier_async函数的使用(栅栏函数)
- 使用GCD处理几个线程之间的依赖关系。
- GCD中的dispatch_barrier_async函数的使用(栅栏函数)
- 第02天多线程网络:(02):GCD栅栏函数
- GCD中使用dispatch_after函数延迟处理任务
- C、C++字符串处理函数
- 函数包装器,函数私有类处理
- 学习笔记之10-字符和字符串常用处理函数
- SQL字符串处理函数大全
- ctype---php中被遗忘字符串处理的函数
- 中断处理函数中自旋锁的应用
- 学习用于异常处理的terminate()函数
- 编写一个与3.12节中dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理(APUE)
- 宽字符处理函数函数与普通函数对照表
- Matlab 图像处理相关函数命令大全
- 为什么中断处理函数内不能休眠
- 中断处理程序、中断上下文中处理延时及一些函数的调用规则
- 关系数据库规范化理论 函数依赖与范式理论
- Linux下常用函数- 信号处理函数(转)