利用條件訊號量設計讀寫鎖

2022-08-20 04:24:11 字數 1087 閱讀 9565

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....