讀者寫者問題之讀者優先

參考博客
http://blog.sina.com.cn/s/blog_a3eacdb20101ct0c.html

讀者寫者問題
(1)允許多個讀者同時執行讀操作;
(2)不允許讀者、寫者同時操作;
(3)不允許多個寫者同時操作。

Reader和Writer的同步問題分爲讀者優先、弱寫者優先(公平競爭)和強寫者優先三種情況,它們的處理方式不同。
(1)讀者優先。
對於讀者優先,應先滿足下列條件
如果新讀者到:
①無讀者、寫者,新讀者可以讀;
②有寫者等待,但有其它讀者正在讀,則新讀者也可以讀;
③有寫者寫,新讀者等待。
如果新寫者到:
①無讀者,新寫者可以寫;
②有讀者,新寫者等待;
③有其它寫者,新寫者等待。

單純使用信號量不能解決讀者與寫者問題,

引入計數器rCount 對讀進程進行計數;

rCountMutex 是用於對計數器rCount 操作的互斥信號量(Semaphore );

rwMutex表示是讀者與寫者互斥的信號量;

於是讀者優先的程序設計如下:

僞代碼:

int rCount=0;

int rCountMutex=1;

int rwMutex=1;

void reader(){

P(rCountMutex);

rCount++;

if(rCount==1)P(rwMutex);

V(rCountMutex);

讀操作;

P(rCountMutex);

rCount--;

if(rCount==0)V(reMutex);

V(rCountMutex);

}

void writer(){

P(rwMutex)

寫操作;

V(rwMutex);

}


源代碼下載:

http://pan.baidu.com/s/1bn8L9Ob


發佈了26 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章