iOS中的读写安全方案
2019-03-08 16:52
120 查看
iOS中的读写安全方案
- 同一时间,只能有一个线程进行写操作
- 同一时间,允许多个线程进行读操作
- 同一时间,不允许既有写操作,又有读操作
方案一:pthread_rwlock
读写锁
导入头文件
#import <pthread.h>
@property (assign, nonatomic) pthread_rwlock_t lock; - (void)viewDidLoad { [super viewDidLoad]; // 初始化锁 pthread_rwlock_init(&_lock, NULL); dispatch_queue_t queue = dispatch_get_global_queue(0, 0); for (int i = 0; i < 10; i++) { dispatch_async(queue, ^{ [self read]; }); dispatch_async(queue, ^{ [self write]; }); } } - (void)read { pthread_rwlock_rdlock(&_lock); sleep(1); NSLog(@"%s", __func__); pthread_rwlock_unlock(&_lock); } - (void)write { pthread_rwlock_wrlock(&_lock); sleep(1); NSLog(@"%s", __func__); pthread_rwlock_unlock(&_lock); } - (void)dealloc { pthread_rwlock_destroy(&_lock); }
方案二:dispatch_barrier_async
异步栅栏函数
- (void)viewDidLoad { [super viewDidLoad]; self.queue = dispatch_queue_create("rw_queue", DISPATCH_QUEUE_CONCURRENT); for (int i = 0; i < 10; i++) { dispatch_async(self.queue, ^{ [self read]; }); dispatch_async(self.queue, ^{ [self read]; }); dispatch_async(self.queue, ^{ [self read]; }); dispatch_barrier_async(self.queue, ^{ [self write]; }); } } - (void)read { sleep(1); NSLog(@"read"); } - (void)write { sleep(1); NSLog(@"write"); }
注意:
dispatch_barrier_async必须使用自己创建的并行队列才有效果。
相关文章推荐
- iOS安全攻防(二十四):敏感逻辑的保护方案(1)
- (转)iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等
- iOS安全攻防(二十四):敏感逻辑的保护方案(1)
- iOS安全攻防:static和被裁的符号表,Objective-C代码混淆,敏感逻辑的保护方案(1)
- iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等
- iOS安全攻击和防御(24):敏感的保护方案逻辑(1)
- iOS安全攻防(二十四):敏感逻辑的保护方案(1)
- 网络信息系统安全检测方案设计(下)
- 优秀开源代码解读之JS与iOS Native Code互调的优雅实现方案
- iOS界面跳转的一些优化方案
- windows 2003系统目前最完善最完美的安全权限方案
- Cisco路由器的安全配置简易方案
- Cocos2d-x开发系列 iOS多Target方案
- 微信APP方案 IOS跳转 App Store下载 卓跳转手机浏览器下载
- iOS应用架构谈 view层的组织和调用方案
- ios 灰度方案
- iOS应用架构谈 网络层设计方案
- iOS安全攻防(三):使用Reveal分析他人app
- iOS 应用架构谈 本地持久化方案
- iOS 11 安全区域适配总结(转)