讀寫優先問題

2021-08-09 02:40:39 字數 1215 閱讀 8791

**如下:

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的優先權最低。...