1、思考如何实现以下场景
- 同一时间, 只能有一个线程进行写的操作
- 同一时间, 允许有多个线程进行读的操作
- 同一时间,不允许既有写的操作,又有读的操作
2、上面的场景就是典型的“多读单写”,经常用于文件等数据的读写操作,iOS中的实现方案有:
pthread_rwlock:读写锁
// 初始化锁
pthread_rwlock_init(&_lock, NULL);
pthread_rwlock_rdlock(&_lock);
// 读操作
pthread_rwlock_unlock(&_lock);
pthread_rwlock_wrlock(&_lock);
// 写操作
pthread_rwlock_unlock(&_lock);
dispatch_barrier_async:异步栅栏调用
dispatch_queue_t queue = dispatch_queue_create("queue_rw", DISPATCH_CURRENT_QUEUE_LABEL);
dispatch_async(queue, ^{
// 读操作
});
dispatch_barrier_async(queue, ^{
// 写操作
});
网友评论