iOS中的读写安全方案
2019-02-17 本文已影响20人
小小小蚍蜉
思考如何实现以下场景
同一时间,只能有1个线程进行写的操作
同一时间,允许有多个线程进行读的操作
同一时间,不允许既有写的操作,又有读的操作
上面的场景就是典型的“多读单写”,经常用于文件等数据的读写操作,iOS中的实现方案有:
1,pthread_rwlock读写锁,pthread_rwlock等待锁的线程会进入休眠,
用法:
pthread_rwlock_t lock;
pthread_rwlock_init(&_lock,NULL);
- (void)read {
pthread_rwlock_rdlock(&_lock);
//coding here...
pthread_rwlock_unlock(&_lock);
}
- (void)write
{
pthread_rwlock_wrlock(&_lock);
// coding here
pthread_rwlock_unlock(&_lock);
}
- (void)dealloc
{
pthread_rwlock_destroy(&_lock);
}
2,dispatch_barrier_async:异步栅栏调用,此方法传入的并发队列必须是自己通过dispatch_queue_cretate创建的