讀寫鎖是共享獨佔鎖。
讀鎖是共享鎖:讀的同時不能寫,但同時可以多個進程一起讀。
寫鎖是獨佔鎖:同時只能有一個進程進行寫。
利用庫函數
寫模式:
pthread_rwlock_wrlock(&rwlock); //加寫鎖
寫寫寫……
pthread_rwlock_unlock(&rwlock); //解鎖
讀模式:
pthread_rwlock_rdlock(&rwlock); //加讀鎖
讀讀讀……
pthread_rwlock_unlock(&rwlock); //解鎖
互斥鎖+條件變量
這種方法互斥鎖其實鎖的是讀寫線程的數量(w,r 變量),通過讀寫線程個數協調讀寫操作。
寫模式:
pthread_mutex_lock(&mutex); //加鎖
while(w != 0 || r > 0)
{
pthread_cond_wait(&cond, &mutex); //等待條件成立
}
w++;
pthread_mutex_unlock(&mutex);
寫寫寫……
pthread_mutex_lock(&mutex);
w--;
pthread_cond_broadcast(&cond); //喚醒其他因條件變量而產生的阻塞
pthread_mutex_unlock(&mutex); //解鎖
讀模式:
pthread_mutex_lock(&mutex);
while(w != 0)
{
pthread_cond_wait(&cond, &mutex); //等待條件成立
}
r++;
pthread_mutex_unlock(&mutex);
讀讀讀……
pthread_mutex_lock(&mutex);
r--;
if(r == 0)
pthread_cond_broadcast(&cond); //喚醒其他因條件變量而產生的阻塞
pthread_mutex_unlock(&mutex); //解鎖