作業系統實驗 P V原語應用分析

2021-10-25 02:20:26 字數 1440 閱讀 9799

(1)windows作業系統中p操作對應的函式是:waitforsingleobject(),了解此函式的功能;

(2)windows作業系統中v操作對應的函式是:releasesemaphore(),了解此函式的功能;

(3)實現p、v操作。

有兩個執行緒hthread1和hthread2共同使用乙個緩衝區資源buffer,執行緒hthread1負責向buffer中寫入字元,執行緒hthread2負責從buffer中讀取字元,並顯示出來。這樣,執行緒hthread1對緩衝區buffer的寫操作write()和執行緒hthread2對緩衝區buffer的讀操作read()就需要互斥使用緩衝區資源buffer了。

為了讓write()每次寫入的字str[i](i=0…4)一定能被唯一地read()一次,需要把緩衝區buffer的使用看做對兩個資源的操作:緩衝區buffer滿和緩衝區buffer空

這樣,需要定義兩個訊號量semaphore1和semaphore2,分別控制對「緩衝區buffer滿」和「緩衝區buffer空」這兩個資源的互斥使用。只有緩衝區空時可以write(),緩衝區滿時可以read()。

#include

#include

// 定義兩個執行緒函式write()和read()

// read()、write()函式分別使用vc++的p、v操作waitforsingleobject()和releasesemaphore()

dword winapi write

(lpvoid lpparameter)

;dword winapi read

(lpvoid lpparameter)

;// 緩衝區資源

unsigned

char buffer;

// 兩個訊號量,分別使用緩衝區buffer的兩個資源:滿和空

// semaphore1 表示緩衝區buffer滿,初始值為0,最大值為1

// semaphore2 表示緩衝區buffer空,初始值為1,最大值為1

handle semaphore1;

handle semaphore2;

//執行緒控制代碼

handle hthread1;

handle hthread2;

void

main()

// 執行緒1對應的p函式實體:緩衝區buffer寫操作

dword winapi write

(lpvoid lpparameter)

return0;

}// 執行緒2對應的v函式實體:緩衝區buffer讀操作

dword winapi read

(lpvoid lpparameter)

// 回車換行

cout

}

作業系統PV原語練習(2)

題目描述 有乙個倉庫,可以存放a 和b 兩種產品,但要求 1 每次只能存入一種產品 a 或b 2 n a 產品數量 b 產品數量 m。其中,n 和m 是正整數。試用同步演算法描述產品a 與產品b 的入庫過程。思路如下 題目中沒有說倉庫的大小,假設預設是無限量 每次能存放乙個產品,互斥的訪問倉庫,設定...

作業系統 PV操作

1.pv原語的含義 p操作和v操作是不可中斷的程式段,稱為原語。pv原語及訊號量的概念都是由荷蘭科學家e.w.dijkstra提出的,其基本思路是用一種新的變數型別 semaphore 來記錄當前可用資源的數量。訊號量sem是一整數,sem大於等於零時代表可供併發程序使用的資源實體數,但sem小於零...

作業系統 PV操作

分析 進入書店p sn 與離開書店v sn 操作對應題目中的 該書店最多允許n個購書者進入 因為假如進入書店的人數超過了最大的限制,p操作會被阻塞,知道v操作執行後釋放空間。接下來分析購書與收費的流程,現實生活中購書付款是顧客提出繳費的要求後,收銀員才能進行收費。所以收銀員預設是處於待機狀態即阻塞狀...