有關訊號量和PV操作的易(粗)懂(淺)理解

2021-08-28 17:24:27 字數 1655 閱讀 9026

大概只有作業系統老師布置的作業(要交)能讓我認真學習吧……

1.有關訊號量的一些說明:

訊號量s是乙個整數,s大於等於零時代表可供併發程序使用的資源實體數,但s小於零時則表示正在等待使用共享資源的程序數。

在多程序環境下,程序在進入乙個臨界**段之前,程序必須獲取乙個訊號量;一旦臨界**段完成了,釋放乙個訊號量。其他想進入臨界**段的程序必須等待直到那個程序釋放訊號量。

用訊號量實現程序互斥的演算法如下:

semaphore s=1;

parbegin

process1:begin

repeate

while s<=0 do no-ops;

s=s-1;

critical section;//兩個程序的臨界區是互斥的

s=s+1;

until false;

endprocess2:begin

repeate

while s<=0 do no-ops;

s=s-1;

critical section;

s=s+1;

until false;

endparend.

2.windows下訊號量包含的幾個操作原語:

createsemaphore() 建立乙個訊號量

opensemaphore() 開啟乙個訊號量

releasesemaphore() 釋放訊號量

waitforsingleobject() 等待訊號量

具體操作看大神的文章

1.pv操作的一些概念:

由來:pv操作是由荷蘭人狄克斯特拉用荷蘭文定義的,因為在荷蘭文中,通過叫passeren,釋放叫vrijgeven,pv操作因此得名。

作用:實現程序同步與互斥。p操作表示申請乙個資源,v操作表示釋放乙個資源。

定義:p操作:s=s-1,若s>=0,則執行p操作的程序繼續執行;若s<0,則置該程序為阻塞狀態,並將其插入阻塞佇列。

wait(s):    while s<=0  do  no-ops;

s=s-1;

v操作:s=s+1,若s>0,則執行v操作的程序繼續執行,此時不喚醒其他程序;若s<0,則從阻塞狀態喚醒乙個程序,並將其插入就緒佇列。

signal(s): s=s+1;
有關pv操作的一些問題看大神的解答

還有乙個形象的解釋

用pv操作實現程序的互斥演算法——在臨界區的前後加上wait(p操作)和signal(v操作)函式即可:

repeate

wait(s);

critical section;

signal(s);

until false;

2.pv操作的特點(一組pv操作對應於乙個程序 ):

原子性,p和v操作不可分!

連續性,p和v操作是不間斷的。

p自己,v對方:p的是自己的訊號量減1,v的是對方的訊號量加1.

訊號量,PV操作

它從整型訊號量 記錄型訊號量,進而發展為 訊號量集 機制 訊號量集,就是訊號量的集合 現在要用的是記錄型訊號量 1,訊號量幹嘛用的?訊號量 解決程序間同步與互斥問題 2.訊號量的組成 訊號量 分很多種,在此寫記錄型訊號量 record semaphore 訊號量組成 每個訊號量s除乙個整數值s.va...

訊號量同步 P V 操作

訊號是 e.w.dijkstra 在二十世紀六十年代末設計的一種程式設計架構。dijkstra 的模型與鐵路操作有關 假設某段鐵路是單線的,因此一次只允許一列火車通過。訊號將用於同步通過該軌道的火車。火車在進入單一軌道之前必須等待訊號燈變為允許通行的狀態。火車進入軌道後,會改變訊號狀態,防止其他火車...

PV操作和訊號量

乙個程序被分為了 就緒 ready 執行 running 和 阻塞 blocking 三個工作狀態,當前用處理器的哪個程序是 執行 狀態,當前已經具備了使用處理器的條件而等待處理器的程序是處於就緒狀態的程序,當執行的程序由於某種原因無法繼續使用處理器的時候就停止他使用處理器使他進入 阻塞 狀態,當他...