iOS开发中,大部分时间都是采用互斥锁,可是当多读少写的状况时,互斥锁会比较浪费加解锁的时间,因此此时就应该采用读写锁。bash
读写锁具备如下特色:异步
pthread_rwlock_t lock;
// 初始化锁
pthread_rwlock_init(&lock, NULL);
// 读-加锁
pthread_rwlock_rdlock(&lock);
// 读-尝试加锁
pthread_rwlock_tryrdlock(&lock);
// 写-加锁
pthread_rwlock_wrlock(&lock);
// 写-尝试加锁
pthread_rwlock_trywrlock(&lock);
// 解锁
pthread_rwlock_unlock(&lock);
// 销毁
pthread_rwlock_destroy(&lock);
复制代码
dispatch_barrier_async
也被叫作栅栏块、同步点,简单的说就是在并行队列中的一个同步点,在dispatch_barrier_async
以后的异步任务,须要等到dispatch_barrier_async
执行完成后,才能够执行。async
// 建立一个并行队列
dispatch_queue_t queue = dispatch_queue_create("LLDebugtool.com", DISPATCH_QUEUE_CONCURRENT);
// 执行一些读操做
dispatch_sync(queue, ^{
// Read action1.
});
dispatch_sync(queue, ^{
// Read action2.
});
...
// 写操做
dispatch_barrier_async(queue, ^{
// Write action.
});
// 继续执行读操做
dispatch_sync(queue, ^{
// Read action3.
});
dispatch_sync(queue, ^{
// Read action4.
});
复制代码