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