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.
});
複製代碼