讀者和寫者
- 讀寫兩組進程,共享一個文件,多個讀者可以同時訪問文件,多個寫者不可以同時訪問文件,寫者和讀者也不可以同時訪問文件
- 共享讀;獨占寫
- 特征:1,資源被誰占有;2,寫者改變資源,讀者不改變資源
- 分析:寫者關心文件是否被占有;讀者作為一個團體去讀文件,第一個人關心文件是否被占有;讀者團中間的人增加讀者團的人數;最后一個讀者需要釋放文件

semaphore mutex = 1;讀者i(){while(1){p(mutex);if (read_count == 0){p(s);}read_count++;v(mutex);p(mutex);count--;v(mutex);if (read_count == 0){v(s);}}
}寫者i(){while(1){p(s);寫操作;v(s);}
}
?例題
- 一根繩子橫跨峽谷兩邊,猴子通過繩索過峽谷,只要朝著相同方向,同一時刻可以通過多只猴子,但是如果是相反的方向,同時有猴子通過就會產生死鎖,如果一只猴子想過峽谷,必須看是否有相反方向的猴子通過繩索,請使用pv操作解決問題
- 猴子屬性分為 第一只 中間 最后一只
- 代碼
semaphore mutex = 1;
semaphore s = 1;//橋
左邊猴子(){while(1){p(mutex);if (left_count == 0){p(s);}left_count++;v(mutex);過橋;p(mutex);left_count--;if (left_count == 0){v(s);}v(mutex);}
}
生產者和消費者 以及 讀者和寫者之間的區別
- 資源的影響 消費者會改變資源;但是讀者不會改變資源
- 讀者表現一個團體的性質,需要計數,按照屬性分為 第一個 中間的人 和 最后一個人;生產者和消費者計數是對資源的利用和剩余進行計數。