国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

操作系統(tǒng)經(jīng)典P、V操作 應(yīng)用題

2021-04-03 22:35 作者:彎腰見你抿嘴笑  | 我要投稿

P127

三、應(yīng)用題:

?

  1.另一個經(jīng)典同步問題:吸煙者問題(patal,1971)。三個吸煙者在一間房間內(nèi),還有一個香煙供應(yīng)者。為了制造并抽掉香煙,每個吸煙者需要三樣?xùn)|西:煙草、紙和火柴。供應(yīng)者有豐富的貨物提供。三個吸煙者中,第一個有自己的煙草,第二個有自己的紙,第三個有自己的火柴。供應(yīng)者將兩樣?xùn)|西放在桌子上,允許一個吸煙者進(jìn)行對健康不利的吸煙。當(dāng)吸煙者完成吸煙后喚醒供應(yīng)者,供應(yīng)者再放兩樣?xùn)|西(隨機(jī)地)在桌面上,然后喚醒另一個吸煙者。試采用信號量和P、V操作編寫他們同步工作的程序。

  問題分析:

  供應(yīng)者seller隨即產(chǎn)生兩樣?xùn)|西,提供它們,這里用普通變量來表示

  吸煙者進(jìn)程smoker根據(jù)其排號不同,擁有不同的一件東西。假設(shè)1號吸煙者擁有煙草tobacco,2號吸煙者擁有紙paper,3號吸煙者擁有火柴match。其他號碼錯誤返回。

  吸煙者的序號代表他們擁有的東西,用他們的序號和供應(yīng)者產(chǎn)生的兩樣?xùn)|西比較,如果都不相等,則說明他擁有的東西和供應(yīng)者產(chǎn)生的東西匹配,它可以吸煙。如果其中一個相等,則退出,繼續(xù)排隊。

  mutex信號量代表一個只能進(jìn)入的門,每次只有一個吸煙者可以進(jìn)入進(jìn)行比較和吸煙。

  每個吸煙者在吸煙完畢之后出門之前要叫醒供應(yīng)者,調(diào)用seller進(jìn)程。

?

  var s, S1, S2, S3; semaphore;

  S:=1; S1:=S2:=S3:=0;

  fiag1,flag2,fiag3:Boolean;

  fiag1:=flag2:=flag3:=true;

  cobegin

  ?process 供應(yīng)者

  begin

  repeat

  ?P(S);

  取兩樣香煙原料放桌上,由flagi標(biāo)記;

  ?//flag1、flag?2、flag?3 代表煙草、紙、火柴

if flag2&flag3 then V(S1); //供紙和火柴

  ?else if flag1&fiag3 then V(S2); //供煙草和火柴

  ?else V(S3); //供煙草和紙

  untile false;

  end

  ?process吸煙者1

  begin

  repeat

  P(S1);

  取原料;

  做香煙;

  ?V(S);

  吸香煙;

  untile false;

  end

  ?process吸煙者2

  begin

  repeat

P(S2);

  取原料;

  做香煙;

  ?V(S);

  吸香煙;

  untile false;

  end

  ?process吸煙者3

  begin

  repeat

  P(S3);

  取原料;

  做香煙;

  V(S);

  吸香煙;

  untile false;

  end

  coend

2.在一個盒子里,混裝了數(shù)量相等的圍棋白子和黑子,現(xiàn)在要用自動分揀系統(tǒng)把白子和黑子分開。該系統(tǒng)設(shè)有兩個進(jìn)程P1和P2,其中P1揀白子,P2揀黑子。規(guī)定每個進(jìn)程每次只揀一子,當(dāng)一進(jìn)程正在揀子時,不允許另一個進(jìn)程去揀,當(dāng)一進(jìn)程揀了一子時,必須讓另一進(jìn)程去揀,試寫出兩個并發(fā)進(jìn)程能正確執(zhí)行的算法。

分析:實(shí)質(zhì)上是兩個進(jìn)程的同步問題,設(shè)信號量S1和S2分別表示可揀白子和黑子,不失一般性,若令先揀白子。

var ?S1,S2:semaphore;

S1:=1;S2:=0;

Cobegin

{

process P1

begin

repeat

P(S1);

揀白子

V(S2);

until false;

end

process P2

begin

repeat

P(S2);

揀黑子

V(S1);

until false;

end

}

coend.

3、一個餐廳有4類職員:(1)領(lǐng)班:接受顧客點(diǎn)菜(2)廚師:準(zhǔn)備顧客的飯菜(3)打包工:將做好的飯菜打包(4)出納員:收款并提交食品。

分析:將這四類職員看成四類進(jìn)程P1,P2,P3,P4,然后四類進(jìn)程對兩個變量進(jìn)行操作,s1是點(diǎn)菜數(shù)量,s2是每道菜的狀態(tài),其值0表示菜做好,1表示菜做好了

具體解答:

定義三個信號量:

s1——點(diǎn)菜數(shù)量,初始值為0;

s2——菜的狀態(tài),初始值為0;

s3——包裝狀態(tài),初始值為0;

領(lǐng)班進(jìn)程:

while(true){

顧客點(diǎn)菜;

v(s1); ?????//此時表示有人點(diǎn)菜了

}

廚師進(jìn)程:

while(true){

p(s1); ?????//保證有人點(diǎn)菜之后才會準(zhǔn)備菜
準(zhǔn)備飯菜;

v(s2);

}
包工進(jìn)程:

while(true){

p(s2); ??????//保證廚師做好飯菜才能準(zhǔn)備包裝

包裝好飯菜;

v(s3);

}

出納員進(jìn)程:

while(true){

p(s3); ????//保證包裝好才能出納

收款并提交食品;

如果考慮到必須完成一個顧客訂單之后,才能接下一位顧客訂單的話,那就可以增加一個控制變量s4(初始值為0),在領(lǐng)班進(jìn)程開始時,即“顧客點(diǎn)菜”之前進(jìn)行v(s4)操作,在出納員進(jìn)程中增加v(s4)操作即可。

4.設(shè)有三組進(jìn)程Pi、Qj、Rk,其中Pi、Qj構(gòu)成一對生產(chǎn)者和消費(fèi)者,共享一個由M1個緩沖區(qū)構(gòu)成的循環(huán)緩沖池buf1。Qj、Rk構(gòu)成另一對生產(chǎn)者和消費(fèi)者,共享一個由M2個緩沖區(qū)構(gòu)成的循環(huán)緩沖池buf2。如果Pi每次生產(chǎn)一個產(chǎn)品投入buf1,Qj每次從中取兩個產(chǎn)品組裝后成一個并投入buf2,Rk每次從中取三個產(chǎn)品包裝出廠。試用信號量和P、V操作寫出它們同步工作的程序。

var mutex1 , mutex2 , mutex3 : semaphore;

empty1 , empty2 , full1 , full2 ; semaphore ;

  in1 , in2 , out1 , out2 : integer ; counter1 , counter2:integer ;

  buffer1:array[0…M1-1] of item ; buffer2:array[0…M2-1]of item ;

  empty1:=M1 ; empty:=M2;

  in1 : = in2 :=out1:=out2:=0 ; counter1:=counter2:=0 ;

  fun1:=full2:=mutex1:=mutex2:=mutex3:=1;

  cobegin

  {

  process Pi

  begin
  L1:

  P(empty1) ;

  P(mutex1 ) ;

  put an item into buffer [in1] ;

  in1:=(in1+1) mod M1 ;

  counter++;

  if counter1 = 2 then { counter1:=0;V(full1);}

  V(mutex) ;

  goto L1;

  end

?

  processQj

  begin

  L2:

  P ( full2) ;

  P ( mutex1 ) ;

  take an item from buffer1[out1];

  out1:=(out1+1) mod M1;

  take an item from buffer1[out1] ;

  out1:=(out1 + 1) mod M1 ;

  V ( mutex1 ) ;

  V ( empty1 ) ;

  V ( empty1 ) ;

  Process the products ;

  P ( emPty2) ;

  P ( mutex2 ) ;

  put an item into buffer2 [ in2 ] ;

  in2:=( in2 + l ) mod M2 ;

  counter2 + + ;

  if counter2 = 3 then { counter2:=0 ;V( full2 ) ; }

  V ( mutex2) ;

  goto L2 ;

  

processRk

  begin L3 :

  P ( full2 ) ;

  P ( mutex2 ) ;

  take an item from buffer2 [out2];

  out2: = ( out2 + 1 ) mod M2 ;

  take an item from buffer2 [out2] ;

  out2:=( out2 + 1) mod M2 ;

  take an item from buffer2 [out2];

  out2:=(out2 + 1 ) mod M2 ;

  V( mutex2 ) ;

  V ( empty2 ) ;

  V ( empty2 ) ;

  V ( empty2 ) ;

  packet the products ;

  goto L3 ;

  end

  }

  Coend

6.某一游覽勝地,有一天然隧道,隧道內(nèi)只允許一人通過。為使雙方游人都有機(jī)會通過,規(guī)定當(dāng)同一方向經(jīng)過一人后就交替地改變方向,讓另一個游人通過,要想進(jìn)入隧道的人在隧道口排隊等待,試用信號量與P、V操作編寫游人到達(dá)隧道口,通過隧道并從另一端隧道口離開的程序。

將隧道的兩個方向分別標(biāo)記為A和B;并設(shè)置三個初值都1信號量:SA用來實(shí)現(xiàn)對從A到B通行,SB用來實(shí)現(xiàn)從B到A通行,mutex用來實(shí)現(xiàn)兩個方向的行人對隧道的互斥使用。則具體描述如下:

VarSA,SB,mutex:semaphore:=1,0,1;

Begin

Parbegin

   process A: begin

         P(SA);

         P(Mutex);
         過隧道;

        V(mutex);

       ????V(SB);

end   

process B: begin

     P(SB)

         P(Mutex);
         過隧道;

        V(mutex);

       ????V?(SA);

end

7. 有P1、P2、P3三個進(jìn)程共享一個表格,P1對F只讀不寫,P2對F只寫不讀,P3對F先讀后寫。進(jìn)程可同時讀F,但有進(jìn)程寫時,其他進(jìn)程不能讀和寫。用(1)信號量和P、V操作編寫三進(jìn)程能正確工作的程序。

分析:這是讀--寫者問題的變種。其中,P3既是讀者又是寫者。讀者與寫者之間需要互斥,寫者與寫者之間需要互斥,為提高進(jìn)程運(yùn)行的并發(fā)性,可讓讀者盡量優(yōu)先。

varrmutex,wmutex:semaphore;

rmutex:=wmutex:=1; count:integer;count:=0; cobegin {

process P1

begin repeat

P(rmutex);

count:=count+1;

if count=1 then P(wmutex); V(rmutex); Read F; P(rmutex);

count:=count-1;

if count=0 then V(wmutex); V(rmutex); untile false; end

process P2

begin repeat

P(wmutex); Write F; V(wmutex);

untile false;

process P3

begin repeat

P(rmutex);

count:=count+1;

if count=1 then P(wmutex); V(rmutex); Read F; P(rmutex);

count:=count-1;

if count=0 then V(wmutex); V(rmutex); P(wmutex); Write F; V(wmutex); untile false; end }

coend


操作系統(tǒng)經(jīng)典P、V操作 應(yīng)用題的評論 (共 條)

分享到微博請遵守國家法律
明溪县| 石家庄市| 阳高县| 锡林郭勒盟| 樟树市| 双流县| 嘉兴市| 威海市| 石首市| 平和县| 麻城市| 临海市| 博客| 榕江县| 成都市| 珲春市| 桃江县| 邯郸市| 林西县| 黔西| 民勤县| 酉阳| 平湖市| 伊春市| 桦川县| 邹城市| 独山县| 河源市| 辽宁省| 德令哈市| 阿克苏市| 武平县| 石河子市| 嘉善县| 尉氏县| 汝城县| 百色市| 溆浦县| 太白县| 炉霍县| 苗栗市|