問題:
一些讀者和一些寫者對同一個黑板進行讀寫。多個讀者可同時讀黑板,但一個時刻只能有一個寫者,讀者寫者不能同時使用黑板。對使用黑板優先級的不同規定使讀者-寫者問題又可分為幾類。第一類問題規定讀者優先級較高,僅當無讀者時允許寫者使用黑板。
P,V原語實現:
進程: writer-寫者進程 reader-讀者進程
定義變量:
mutex=1; //黑板資源
reader_mutex=1; //控制讀者間的互斥
r_count=0; //統計讀者人數
//reader - 讀者進程 { while(true) { p(reader_mutex); //控制讀者的互斥,防止出現兩個讀者同時執行reader_count++,而reader_count只加1; reader_count++; //要使用黑板的讀者人數加1; if(reader_count==1) p(mutex); //如果是第一個讀者,就要申請黑板; v(reader_mutex); //釋放變量,讓下一個讀者可以進來讀黑板; read(); //進行讀黑板操作; p(reader_mutex); reader_count--; //讀者讀完黑板後,讀者人數要減1,同樣也要考慮互斥的情況; if(reader_count==0) v(mutex); //如果是最後一個讀者,就要釋放黑板資源; v(reader_mutex); }
//writer - 寫者進程 { while(true) { p(mutex); //申請黑板資源; write(); //進行寫操作; v(mutex); //釋放黑板資源; } }
本文出自 “技術在於堅持” 博客,請務必保留此出處http://minilinux.blog.51cto.com/4499123/1275337