Barrier的使用
来源:互联网 发布:新一代域名 编辑:程序博客网 时间:2024/05/19 00:14
Barrier主要用于在多个异步操作完成之后,统一对非线程安全的对象进行更新, 如NSMutableString/NSMutableArray…
- Barrier的工作原理
将所有之前添加的异步执行完成之后,在同一个线程中,顺序执行 block 中的代码
接下来我们看一下它是如何实现的 ?
- 首先创建一个并发队列
_queue = dispatch_queue_create("ejParadise", DISPATCH_QUEUE_CONCURRENT);
注意: 必须是自定义的, 不能使用 _queue = dispatch_get_global_queue(0, 0); 否则执行效果没有影响
- 准备工作
- (NSMutableArray *)photoList { if (_photoList == nil) { _photoList = [NSMutableArray array]; } return _photoList;}
- 下载图片
// 开启多个任务,分别下载图片- (void)loadPictures:(int)index { dispatch_async(_queue, ^{ // 模拟延时 [NSThread sleepForTimeInterval:1.0]; // 模拟从网络下载图片 NSString *fileName = [NSString stringWithFormat:@"%02d.jpg", index % 10 + 1]; NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:nil]; UIImage *image = [UIImage imageWithContentsOfFile:path]; // 将图像添加到数组 // NSMutableArray 不是线程安全的,如果同一个时间点,多个线程项数组添加,有可能会出现崩溃 // 要解决这个问题,需要一个特殊的函数 // 将所有之前添加的异步执行完成之后,在同一个线程中,顺序执行 block 中的代码 dispatch_barrier_async(_queue, ^{ NSLog(@"添加图片 %@ %@", fileName, [NSThread currentThread]); [self.photoList addObject:image]; });// [self.photoList addObject:image]; NSLog(@"下载完成 %@ %@", fileName, [NSThread currentThread]); });}
- 调用下载
for (int i = 0; i < 10; ++i) { [self loadPictures:i];}
这样就可以确保图片完成加载后才执行Block里面的内容添加图片
0 0
- Barrier的使用
- 多线程:barrier的使用
- barrier使用
- C# 并行编程 之 Barrier的使用
- OpenThreads使用-Barrier
- Barrier
- 内存屏障的作用:barrier()
- 关于多线程同步的初步教程--Barrier的设计及使用
- C# 并行编程 之 Barrier的使用 - 通过屏障同步并发任务
- C# 并行编程 之 Barrier的使用 - 通过屏障同步并发任务
- 使用Barrier来控制线程同步
- Curator典型使用场景之分布式Barrier。
- Linux文件系统的barrier:启用还是禁用
- 跟着实例学习ZooKeeper的用法: Barrier
- 跟着实例学习ZooKeeper的用法: Barrier
- 如何构造自己的barrier函数?(七)
- IOS GCD的介绍及使用举例&GCD优先级改变、after、group、barrier、sync、apply、semaphore、once等操作方法
- IOS GCD的介绍及使用举例&GCD优先级改变、after、group、barrier、sync、apply、semaphore、o
- Codeforces 509C. Sums of Digits 贪心 + 模拟
- Android 自定义Permission;permission-tree;permission-group自定义(权限,权限组,权限树)
- OS X下修复打不开的灰色文件
- Java 内部类
- Android BroadcastReceiver 广播分析;无序广播与有序广播优先级规则探讨
- Barrier的使用
- 160. Intersection of Two Linked Lists
- 111. Minimum Depth of Binary Tree
- 博客迁移
- [黑马IOS自学第十四篇]Foundation框架学习
- [黑马IOS自学第十五篇]对象内存管理
- [黑马IOS自学第十六篇]OC分类学习
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解-讲得非常棒
- Delphi"配置系统未能初始化"