OC原理之读写锁
iOS中读写安全方案
读写锁区别于线程锁,读写锁允许多个线程去读,但是去写的时候保证只有一个在写
pthread_rwlock
// 初始化锁 pthread_rwlock_init(&_lock, NULL); // 加读锁 pthread_rwlock_rdlock(&_lock); // 尝试加读锁 pthread_rwlock_tryrdlock(&_lock); // 解锁 pthread_rwlock_unlock(&_lock); // 加写锁 pthread_rwlock_wrlock(&_lock); // 尝试加写锁 pthread_rwlock_trywrlock(&_lock); // 销毁锁 pthread_rwlock_destroy(&_lock)
dispatch_barrier_async
相当于一个栅栏,如果是读操作,会立一个栅栏,让所有的读操作都过去,直到有一个写操作,此时再力
立起栅栏,在这个写操作的结束,再立起一个栅栏一次类推
dispatch_queue_create("rw_queue", DISPATCH_QUEUE_CONCURRENT);// 创建一个并行队列 dispatch_async(self.queue, ^{ // read操作 }); dispatch_barrier_async(self.queue, ^{ // 写操作 });