讀寫鎖的實現

2021-07-04 13:13:43 字數 1505 閱讀 3182

首先介紹下pthread_cond_t。 在linux下稱之為狀態變數,與之相關的有下面幾個api:

int pthread_cond_init (pthread_cond_t *cond,pthread_condattr_t *cond_attr);

int pthread_cond_signal (pthread_cond_t *cond);

int pthread_cond_broadcast (pthread_cond_t *cond);

int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex);

int pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime);

int pthread_cond_destroy (pthread_cond_t *cond);

這裡就講下2個api,pthread_cond_signal和pthread_cond_wait,一般的用法如下:

pthread_cond_wait會解鎖lock,然後在cond上等待,這兩步是atomic operation. 當pthread_cond_wait返回時,會同時對lock上鎖. 這裡我的理解是,如果獲取不到lock鎖,即使cond已經被啟用,pthread_cond_wait依然不會返回。

pthread_cond_signal呼叫之前一定會先拿到lock鎖。pthread_cond_signal不會去管lock鎖,只是將cond啟用,接下去釋放lock鎖。這時候pthread_cond_wait就可以得到lock從而返回了。

言歸正傳,下面是利用條件變數實現的乙個讀寫鎖的例子:

typedef struct pthread_rwlock

pthread_rwlock_t ;

int pthread_rwlock_init(pthread_rwlock_t * lock, pthread_rwlockattr_t *attr)

int pthread_rwlock_destroy(pthread_rwlock_t * lock) 

int pthread_rwlock_rdlock(pthread_rwlock_t * lock) 

int pthread_rwlock_wrlock(pthread_rwlock_t * lock)

int pthread_rwlock_unlock(pthread_rwlock_t * lock)

} else if (lock->active_readers < 0) /* release the write lock */

else if (lock->pending_writers > 0)

}pthread_mutex_unlock(&lock->mutex);

return 0;

}還有pthread_rwlock_tryrdlock 和 pthread_rwlock_trywrlock

讀寫鎖的實現!

寫程式過程中總免不了用到鎖,雖然大牛們總是推薦無鎖程式設計,但那境界對我來說實在太遠了。專案中的資料資源的訪問,少不了鎖,考慮到都是讀的多,寫的少,於是參考網路,自己實現乙個寫優先的讀寫鎖。windows下的 class rwlock include rwlock.h rwlock rwlock r...

讀寫鎖的實現

讀寫鎖主要用來解決讀 讀能共存,讀 寫不能共存,寫 寫不能共存的情況,它的 使用場景主要是讀寫分離,比如自己實現乙個快取,在重新整理快取的時候就需要用到讀寫鎖。下面擼上一段 簡單實現以下。author administrator date 2019 3 3 public class cache ca...

C 實現讀寫鎖ReadWriteLock

1 讀寫鎖基本思想 寫者之間互斥 寫者和讀者之間互斥,而讀者之間並不需要互斥 2 讀寫鎖分為兩種 讀者優先和寫者優先 讀者優先,即當前只要可讀,就是可進入的 寫者優先,讀者需要看看當前是否有寫者要讀,如果有,則等待至沒有寫者正在寫或者需要寫的情況 注 兩種方式,都會存在飢餓現象 include re...