操作系统:读写问题
?讀者-寫者問題
允許多個進程同時對數據進行讀操作,但是不允許讀和寫以及寫和寫操作同時發生。
一個整型變量 count 記錄在對數據進行讀操作的進程數量,一個互斥量 count_mutex 用于對 count 加鎖,一個互斥量 data_mutex 用于對讀寫的數據加鎖。
typedef int semaphore; semaphore count_mutex = 1; semaphore data_mutex = 1; int count = 0;void reader() {while(TRUE) {down(&count_mutex);count++;if(count == 1) down(&data_mutex); // 第一個讀者需要對數據進行加鎖,防止寫進程訪問up(&count_mutex);read();down(&count_mutex);count--;if(count == 0) up(&data_mutex);up(&count_mutex);} }void writer() {while(TRUE) {down(&data_mutex);write();up(&data_mutex);} }?
總結
- 上一篇: 操作系统:生产者与消费者问题
- 下一篇: 操作系统:哲学家进餐问题