手動實現讀寫鎖(線程級)

讀寫鎖是共享獨佔鎖。
讀鎖是共享鎖:讀的同時不能寫,但同時可以多個進程一起讀。
寫鎖是獨佔鎖:同時只能有一個進程進行寫。

利用庫函數

寫模式:
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);    //解鎖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章