PV操作案例(二) 讀者 寫者 哲學家進餐問題

2021-10-04 12:37:43 字數 912 閱讀 8983

哲學家進餐問題描述

有讀者和寫者兩組併發程序,共享乙個檔案,當兩個程序或兩個以上的讀程序同時訪問共享資料時不會產生***,但若某個寫程序和其他程序(讀程序或寫程序)同時訪問時可能會導致資料不一致的錯誤。因此要求:①允許多個讀者可以同時對檔案執行讀操作;②只允許乙個寫者往檔案中寫資訊;③任一寫者在完成寫操作前不允許其他讀者或寫者工作;④寫者執行寫操作前,應讓已有的讀者或寫者全部退出

關係分析

整理思路

設定訊號量

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操作來改變。作業系統利用訊號量對程序和資源...