PV操作分為P操作和V操作,是為了解決進程的同步與互斥問題。
P操作:使信號量S=S- 1,若S>=0,則該進程繼續(xù)執(zhí)行,否則進程進入等待隊列。
V操作:使信號量S=S+1,若S小于等于0,則喚醒等待隊列中的一個進程。
例如:
有甲,乙兩個資源;A,B,C三個進程。有甲乙兩資源,所以信號量S=2。
第一步:當A進程請求使用甲資源,系統(tǒng)進行P操作使S-1,S=2-1=1>=0,甲資源給A使用。
第二布:又當B進程請求使用乙資源,系統(tǒng)進行P操作使S-1,S=1-1=0>=0,乙資源給B使用。
第三步:又當C進程請求使用資源,系統(tǒng)由于甲乙資源還被占用,這時進行P操作使S-1,S=0-1=-1,C進入等待隊列。
第四步:當A使用甲資源完畢,系統(tǒng)進行V操作使S+1,S=-1+1=0>=0,則喚醒C使用資源。
1.互斥模型:多個進程(互斥)共享一臺打印機。
? ? ? PV編碼為
? ? ? ? P(S);
? ? ? ? 使用打印機;
? ? ? ? V(S);
? ? ? 這里由于只有一臺打印機 所以S=1。這里的S在一個進程中成對出現(xiàn)就是互斥信號量。
2.同步模型:單倉庫、生產(chǎn)者與消費者問題。
生產(chǎn)者生產(chǎn)出商品,放商品進入倉庫,消費者進入倉庫取商品并消費。這里生存者與消費者并不能同時對倉庫進行存取,倉庫中有商品消費者才能取,沒有商品只能等待,他們之間是間接的制約關(guān)系,是同步模型。
設S1為倉庫空位,初始S1=1;S2為商品數(shù)量,初始無商品S2=0。
PV編碼為
生存者:
生產(chǎn)一個產(chǎn)品;
P(S1);
送產(chǎn)品到倉庫;
V(S2);
消費者:
P(S2);
從倉庫取產(chǎn)品;
V(S1);
消費商品;
在這里S1,S2在兩個進程中成對出現(xiàn),所以它們是同步信號量。