讀者寫者問題之寫者優先


讀者寫者問題

寫者優先
int rcount =0;//讀者計數
int wcount=0;//寫者計數
信號量(semaphore)
semaphore  fmutex=1;//文件互斥訪問,即讀者寫者互斥,寫者與寫者互斥
semaphore  rmutex=1//讀者計數互斥
semaphore  wmutex=1//寫者計數互斥
semaphore  qmutex=1//讀者等待隊列


void Reader(){
p(qmutex);
p(rmutex);
rcount++;
if(rcount==1)P(fmutex);
v(rmutex);
v(qmutex);//喚醒讀者等待隊列
讀操作;
p(rmutex);
rcount--;
if(rcount==0)
v(fmutex);
v(rmutex);
}
void writer(){
p(wmutex); //寫者計數互斥
wcount++; //寫者計數
if(wcount==1)p(qmutex);//判斷是否有讀者在排隊等待,如果有等待,沒有就將後來的讀者擋到該信號量外
v(wmutex); //釋放計數資源
p(fmutex); //同一時間只有一個寫者操作
寫操作;
v(fmutex);
p(wmutex);
wcount--;
if(wcount==0)v(qmutex);//所有寫者寫完後釋放讀者排隊等待資源
v(wmutex);
}
參考博客:http://blog.sina.com.cn/s/blog_a3eacdb20101ct0c.html

源代碼:
http://pan.baidu.com/s/1ntqQqyH

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章