**如下:
mutex wr =1;
mutex countmutex =1;
intcount=0;
//首先編寫write的大概框架;
void write()
// read的大概框架如下,其中為了保證讀與讀之間不互斥,而讀與寫之間互斥
// 主要通過記錄當前讀者的個數;
void read()//以上的編寫需要注意讀者何時取得資源與何時釋放資源,以上的寫法只是為了讀與讀之間可以並行的進行讀操作,而在進行讀操作時可以與寫隔離;
//上面的編寫仍然存在乙個問題就是,在寫操作進行時候,如果此時如果有寫者先等待資源,這個時候如果同時有讀者等待資源,這樣並不能保證讀者優先執行,所以為了保證絕對的讀者優先,需要讓用乙個互斥量讓後續的寫者排隊;
額外定義:
mutex quemutex=1;
因此寫者可以這樣寫:
void write()
寫優先需要注意,如果有讀寫程序同時在等待,需要優先執行寫;結合上面的讀優先,可以先把框架搭好;
mutex wr =1; //讀寫資源;
mutex rcountmutex =1;
mutex wcountmutex =1;
mutex quemutex =1;
int wcount = 0;
int rcount = 0;
void write()
//先把最基本的框架寫好;
void read( )
//接下來考慮如果讀寫程序同時排隊如何保證寫程序優先獲得資源;
就像寫者那樣,讀者也需要排隊,需要保證如下兩點:
1.讀程序如果正在執行,此時如果一旦有寫程序在等待,則優先執行寫;
2.寫程序如果在執行,後面的寫不需要排隊直接等待讀寫資源;
read改造如下:
額外宣告: mutex tempmutex =1;
void read( )
//用訊號量做寫優先的問題的時候,讀需要好好斟酌一下,這裡面為了保證絕對的優先順序,在讀者上做的事情與 讀優先時所做的事情一致!
關於公平讀寫 ,也是利用了排隊的思想,很簡單這裡不再贅述,如有任何問題歡迎批評指正,以上均為偽**,注重的是邏輯,你也可以通過pthread等一些執行緒庫進行實際的編寫。
只要你腦子有相應的邏輯,**的編寫自然水到渠成!
讀者寫者問題(讀者優先,寫者優先 ,讀寫公平)
讀者優先的解決方案 互斥訊號量wrt,初值是1,代表乙個共享檔案,解決 讀 寫 互斥,寫 寫 互斥。乙個記數器,即整型變數readcount,記錄讀者數,初值是0。來乙個讀者,readcount加1 當readcount 1表示是第乙個讀者,則需要執行p操作搶占檔案 否則表示已有讀者在安全的讀資料。...
C 讀寫鎖 實現優先寫
讀寫互斥量 當有寫和讀操作同時競爭時,寫操作優先與讀操作 class crwmutex virtual crwmutex default void lockread 沒有寫等待時,可執行讀 m read count void unlockread void lockwrite 沒有讀操作並且沒有正在...
優先佇列(看病優先問題)
看病要排隊這個是地球人都知道的常識。不過經過細心的0068的觀察,他發現了醫院裡排隊還是有講究的。0068所去的醫院有三個醫生 汗,這麼少 同時看病。而看病的人病情有輕重,所以不能根據簡單的先來先服務的原則。所以醫院對每種病情規定了10種不同的優先順序。級別為10的優先權最高,級別為1的優先權最低。...