思考如何實現如下場景併發
上面的場景就是典型的多讀單寫
,常常用於文件等數據的讀寫操做,iOS中的實現方案有異步
// 定義讀寫鎖
pthread_rwlock_t rwlock;
// 初始化讀寫鎖
pthread_rwlock_init(&rwlock, NULL);
// 讀取加鎖
pthread_rwlock_rdlock(&rwlock);
// 嘗試讀取加鎖
pthread_rwlock_tryrdlock(&rwlock);
// 寫入加鎖
pthread_rwlock_wrlock(&rwlock);
// 嘗試寫入加鎖
pthread_rwlock_trywrlock(&rwlock);
// 解鎖
pthread_rwlock_unlock(&rwlock);
// 銷燬讀寫鎖
pthread_rwlock_destroy(&rwlock);
複製代碼
這個函數傳入的併發隊列必須是本身經過dispatch_queue_cretate
建立的async
若是傳入的是一個串行或是一個全局的併發隊列,那這個函數便等同於dispatch_async
函數的效果函數
原理以下圖測試