1 乙個資源同時可以有多個讀寫,但是只能有乙個寫鎖
2 用flag代表鎖的狀態,
#define un_lock 0
#define r_lock 1 //上一把讀鎖加乙個r_lock
#define w_lock -1
偽**1 lock_r
pthread_lock(resource.mutex)
while(resource.flag < 0 ) //說明當前資源為寫鎖
pthread_cond_wait(resource.cond, resource.mutex)
//說明當前資源為無鎖或者讀鎖,再加一把讀鎖
resource.flag+=r_lock
pthread_unlock(resource.mutex)
2 unlock_r
pthread_lock(resource.mutex)
//減去一把讀鎖
resource.flag-=r_lock
if (resource.flag == 0) //說明當前資源為寫鎖
pthread_cond_broadcast(resource.cond) //這個操作啟用所有上寫鎖的執行緒
pthread_unlock(resource.mutex)
3 lock_w
pthread_lock(resource.mutex)
while(resource.flag != 0 ) //說明當前資源為寫鎖或者讀鎖
pthread_cond_wait(resource.cond, resource.mutex)
//說明當前資源為無鎖
resource.flag=w_lock
pthread_unlock(resource.mutex)
4 unlock_w
pthread_lock(resource.mutex)
//減去寫鎖
resource.flag=w_lock
pthread_cond_broadcast(resource.cond) //這個操作啟用所有上寫鎖和讀鎖的執行緒
pthread_unlock(resource.mutex)
訊號量實現讀寫鎖
一般的讀寫鎖 一般的讀寫鎖都是一開始對鎖分配max resource個資源,其中寫操作的時候會一次性占用 max resource個資源,而讀操作的時候就只會占用乙個資源。這樣子會出現乙個問題就是 如果在當前資源的數目不為max resource的時候,那麼總是不能進行寫操作,只能是進行 讀操作,如...
Linux Posix訊號量 讀寫鎖
posix訊號量 sem t sem init int sem init sem t sem,int pshared,unsigned int value 引數 pshared 0表 示執行緒間共享,非零表 示程序間共享 value 訊號量初始值 sem wait 條件不滿足,等待 sem post...
同步 互斥鎖與條件變數 讀寫鎖 訊號量
1.靜態分配互斥量 pthread mutex t mutex pthread mutex initializer 2.動態分配互斥量 pthread mutex init mutex pthread mutex destory mutex 操作 1.pthread mutex lock 加鎖 2....