(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操作執行後釋放空間。接下來分析購書與收費的流程,現實生活中購書付款是顧客提出繳費的要求後,收銀員才能進行收費。所以收銀員預設是處於待機狀態即阻塞狀...