作業系統程序同步互斥問題
pv操作加訊號量來實現程序的同步互斥
解題步驟
首先要分析題目中近程的同步關係和互斥關係
同步關係用前v後p實現
互斥關係,一般都是對於乙個緩衝區或者本質上是緩衝區的變數進行訪問,這時候就要用pv操作將對於這個訊號量的訪問夾在中間
解題精髓就這兩句
下面以408 2023年的真題為例進行講解
三個程序 p1、p2、p3 互斥使用乙個包含 n(n>0)個單元的緩衝區。p1 每次用 produce() 生成乙個正整數並用 put()送入緩衝區某一空單元中;p2 每次用 getodd()從該緩衝區中取出乙個奇數並用 countodd()統計奇數個數;p3 每次用 geteven()從該緩衝區中取出乙個偶數並用 counteven()統計偶數個數。 請用訊號量機制實現這三個程序的同步與互斥活動, 並說明所定義訊號量的含義。 要求用偽**描述。
首先 很明確的就是三個程序互斥的使用緩衝區,所以要設定乙個互斥訊號量mutex,
然後緩衝區單元是n,所以要設定乙個訊號量empty=n
然後p1程序分別和統計偶數和統計奇數的程序形成同步關係(理解,就是只有p1程序生成偶數,統計偶數的程序才能執行..)
所以設定兩個同步訊號量even =0,odd=0
下面就進行**書寫
//semaphore這個單詞請一定要會寫,不然太low了
semaphore odd = 0, even = 0, empty = n, mutex = 1;
p1( )
p2( )
p3( )
最後,這種程序同步互斥的題目真的不是很難
一定要練習幾下,注意自己的理解,這樣就沒什麼問題了。
加油
計算機與作業系統 程序
作業系統中最核心的概念是程序,程序是對正在進行的程式的抽象。因為有了程序這個概念的存在,才讓cpu有了 偽 併發操作的能力。在任何多道程式設計系統中,cpu在多個程序中不斷的切換,每個程序執行幾十至幾百毫秒。嚴格來說,在某乙個瞬間,cpu只能執行乙個程序,而在1秒內,它可能執行多個程序,這就給人了一...
計算機作業系統
為什麼要有作業系統 計算機系統是乙個複雜的系統,如果每位程式設計師在程式設計時都必須掌握計算機系統的所有細節,就會嚴重影響程式設計師的開發效率 作業系統可以對計算機硬體加以管理和優化使用,為使用者程式提供更好的執行環境。作業系統以及其位置 作業系統組成 作業系統功能 應用程式直接與作業系統及其抽象打...
計算機作業系統
實驗一 熟悉linux作業系統 程序觀測 實驗目的 1 了解在linux作業系統中程序的特點和表現形式 2 掌握linux檢視程序的方式與方法 3 在乙個程序中建立另乙個程序的方法 4 掌握父程序和子程序的關係和fork的用法 實驗內容 1 編寫乙個簡單的程式,使用ps或top工具觀察該程序的的id...