哲學家進餐問題描述
有讀者和寫者兩組併發程序,共享乙個檔案,當兩個程序或兩個以上的讀程序同時訪問共享資料時不會產生***,但若某個寫程序和其他程序(讀程序或寫程序)同時訪問時可能會導致資料不一致的錯誤。因此要求:①允許多個讀者可以同時對檔案執行讀操作;②只允許乙個寫者往檔案中寫資訊;③任一寫者在完成寫操作前不允許其他讀者或寫者工作;④寫者執行寫操作前,應讓已有的讀者或寫者全部退出
關係分析
整理思路
設定訊號量
semaphore rw = 1; //用於實現對檔案的互斥訪問。表示當時是否有程序在訪問共享檔案
int count = 0; //記錄當前有幾個讀程序在訪問檔案
semaphore mutex = 1; //用於保證對count變數的互斥訪問
semsphore w = 1; //用於實現「寫優先」
writer ()
}reader ()
}
*結論:這種演算法中,連續進入的多個讀程序可以同時讀檔案;寫者和其他程序不能同時訪檔案,寫者不會飢餓,但也並不是真正的「寫優先」,而是相對公平的先來先服務原則。
有的書把這種演算法成為「讀寫公平法」
一張圓桌上坐著5個哲學家,每個哲學家之間的桌上擺了一根筷子,桌子中間是一碗公尺飯,哲學家們傾注畢生的經歷用於思考和進餐,哲學家在思考時,並不影響他人。只有當哲學家飢餓時,才試圖拿起左右兩邊的筷子(一根一根的拿起)。如果筷子已在他人手上,則需要等待。飢餓的科學家只有同時拿起兩根筷子才可以進餐,當進餐完畢後,放下筷子繼續思考。
semsphore chopsticks[5]=;
semaphore mutex = 1; //互斥地取筷子
pi ()
}
PV 操作 讀者寫者問題
讀者 寫者問題 訊號量的英文叫做 semaphore,是乙個用於在程序間傳遞的特殊便量,通常定義成乙個結構體,其中包含乙個整形變數,以及乙個佇列,如下 struct semaphore一般來說,s 0,s 表示可用資源數量。執行一次 p 操作意味著請求分配乙個單位資源,因此 s 當 s 0 表示已經...
PV操作系列 讀者寫者問題
有乙個許多程序共享的資料區,這個資料區可以是乙個檔案或者主存的一塊空間 有一些只讀取這個資料區的程序 reader 和一些只往資料區寫資料的程序 writer 此外還需要滿足以下條件 1 任意多個讀程序可以同時讀這個檔案 2 一次只有乙個寫程序可以往檔案中寫 3 如果乙個寫程序正在進行操作,禁止任何...
作業系統PV操作及讀者寫者問題
作業系統pv操作及讀者寫者問題 目錄 1 訊號量 2 p v操作原語可描述為以下式子 3 解釋 4 互斥模式原理 5 同步模式原理 6 讀者寫者問題 1 訊號量 pv操作與訊號量的處理有關,訊號量是表示資源的實體,是乙個與佇列有關的整型變數,其值只能由p v操作來改變。作業系統利用訊號量對程序和資源...