




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、六、兩個(gè)進(jìn)程合作完成一個(gè)任務(wù)。在并發(fā)執(zhí)行中,一個(gè)進(jìn)程要等待其合作伙伴發(fā)來(lái)消 息,或者建立某個(gè)條件后再向前執(zhí)行,這種制約性合作關(guān)系被稱(chēng)為進(jìn)程的。 A.同步 B互斥 C. 調(diào)度 D執(zhí)行 答:A 七、為了進(jìn)行進(jìn)程協(xié)調(diào),進(jìn)程之間應(yīng)當(dāng)具有一定的聯(lián)系,這種聯(lián)系通常采用進(jìn)程間交換數(shù)據(jù)的方式進(jìn)行,這種方式稱(chēng)為。 A.進(jìn)程互斥 B進(jìn)程同步 C進(jìn)程制約 D進(jìn)程通信 答:D 八、在測(cè)量控制系統(tǒng)中,數(shù)據(jù)采集任務(wù)把所采集的數(shù)據(jù)送入一單緩沖區(qū);計(jì)算任務(wù)從該單緩沖區(qū)中取出數(shù)據(jù)進(jìn)行計(jì)算。試寫(xiě)出利用信號(hào)量機(jī)制實(shí)現(xiàn)兩者共享單緩沖區(qū)的同步算法。P33 分析及相關(guān)知識(shí) 在本題中采集任務(wù)與計(jì)算任務(wù)共用一個(gè)單緩沖區(qū)當(dāng)采集 任務(wù)采集到一個(gè)
2、數(shù)據(jù)后,只有當(dāng)緩沖區(qū)為空時(shí)才能將數(shù)據(jù)送入緩沖區(qū)中存放,否則應(yīng)等待緩沖區(qū)騰空;當(dāng)緩沖區(qū)中有數(shù)據(jù)時(shí),計(jì)算任務(wù)才能從緩沖區(qū)中取出數(shù)據(jù)進(jìn)行計(jì)算,否則也應(yīng)等待。 本題實(shí)際上是一個(gè)生產(chǎn)者消費(fèi)者問(wèn)題。將生產(chǎn)者消費(fèi)者問(wèn)題抽象出來(lái),以另外 一種形式描述是一種常見(jiàn)的試題形式只要對(duì)生產(chǎn)者消費(fèi)者問(wèn)題有了深入的理 解,就不難解決此類(lèi)試題。 解;在本題中,應(yīng)設(shè)置兩個(gè)信號(hào)量Sf,Se,信號(hào)量Sf表示緩沖區(qū)中是否有可供打印的計(jì)算結(jié)果,其初值為0;信號(hào)量Se用于表示緩沖區(qū)有無(wú)空位置存放新的信息,其初值為1。 本題的同步描述如下: int Se=l; int Sf=0; main() cobegin get(); compute
3、(); coend get() while (采集工作未完成) 采集一個(gè)數(shù)據(jù): p(Se); 將數(shù)據(jù)送入緩沖區(qū)中; v(Sf); compute() while(計(jì)算工作未完成) p(Sf); 從緩沖區(qū)中取出數(shù)據(jù); v(Se); 進(jìn)行數(shù)據(jù)計(jì)算; 九、圖27給出了四個(gè)進(jìn)程合作完成某一任務(wù)的前趨圖,試說(shuō)明這四個(gè)進(jìn)程間的同步關(guān)系,并用P、V操作描述它。P35 圖27 四個(gè)合作進(jìn)程的前趨圖 解:圖27說(shuō)明任務(wù)啟動(dòng)后S1先執(zhí)行。當(dāng)S1結(jié)束后,S2、S3可以開(kāi)始執(zhí)行。
4、S2、S3 完成后,S4才能開(kāi)始執(zhí)行。為了確保這一執(zhí)行順序,設(shè)三個(gè)同步信號(hào)量b2、b3、b4分別 表示進(jìn)程S2、S3、S4是否可以開(kāi)始執(zhí)行,其初值均為0。這四個(gè)進(jìn)程的同步描述如下: int b2=0; /*表示進(jìn)程S2是否可以開(kāi)始執(zhí)行* int b3=0; /*表示進(jìn)程S3是否可以開(kāi)始執(zhí)行* int b4=0; /*表示進(jìn)程S4是否可以開(kāi)始執(zhí)行* main() cobegin S1 ( ); S2 ( ); S3 ( ); S4 ( ); coend S1 ( ) v(b2); v(b3); S2 ( ) p(b2); v(b4); S3 ( ) p(b3): v(b4); S4 ( ) p(
5、b4); p(b4); /*因在S2及S3完成時(shí)均對(duì)b4做了v操作,因此這里要用兩個(gè)p操作* 十、桌上有一空盤(pán),允許存放一只水果。爸爸可向盤(pán)中放蘋(píng)果,也可向盤(pán)中放桔子,兒子專(zhuān)等吃盤(pán)中的桔子,女兒專(zhuān)等吃盤(pán)中的蘋(píng)果。規(guī)定當(dāng)盤(pán)空時(shí)一次只能放一只水果供吃者取用,請(qǐng)用P、V原語(yǔ)實(shí)現(xiàn)爸爸、兒子、女兒三個(gè)并發(fā)進(jìn)程的同步。P37 分析及相關(guān)知識(shí) 在本題中,爸爸、兒子、女兒共用一個(gè)盤(pán)子,且盤(pán)中一次只能放一個(gè)水果當(dāng)盤(pán)子為空時(shí),爸爸可將一個(gè)水果放入果盤(pán)中。若放入果盤(pán)中的是桔子,則允許兒子吃,女兒必須等待;若放入果盤(pán)中的是蘋(píng)果,則允許女兒吃,兒子必須等待。本題實(shí)際上是生產(chǎn)者消費(fèi)者問(wèn)題的一種變形。這里,生產(chǎn)者放入緩沖區(qū)
6、的產(chǎn)品有兩類(lèi),消費(fèi)者也有兩類(lèi),每類(lèi)消費(fèi)者只消費(fèi)其中固定的一類(lèi)產(chǎn)品。 解:在本題中,應(yīng)設(shè)置三個(gè)信號(hào)量S、So、Sa,信號(hào)量S表示盤(pán)子是否為空,其初值 為1;信號(hào)量So表示盤(pán)中是否有桔子,其初值為0;信號(hào)量Sa表示盤(pán)中是否有蘋(píng)果,其初 值為0。同步描述如下: int S=1; int Sa=O: int So=O: main( ) cobegin father(); son(); daughter(): coend father() while (1) p(S); 將水果放入盤(pán)中; if(放入的是桔子) v(So): else v(Sa); ) son( ) while(1) p(So); 從盤(pán)中
7、取出桔子; v(S); 吃桔子; daushter() while(1) p(Sa); 從盤(pán)中取出蘋(píng)果; v(S): 吃蘋(píng)果; PV原語(yǔ)操作詳解 PV原語(yǔ)通過(guò)操作信號(hào)量來(lái)處理進(jìn)程間的同步與互斥的問(wèn)題。其核心就是一段不可分割不可中斷的程序。 信號(hào)量的概念1965年由著名的荷蘭計(jì)算機(jī)科學(xué)家Dijkstra提出,其基本思路是用一種新的變量類(lèi)型(semaphore)來(lái)記錄當(dāng)前可用資源的數(shù)量。 semaphore有兩種實(shí)現(xiàn)方式: 1) semaphore的取值必須大于或等于0。0表
8、示當(dāng)前已沒(méi)有空閑資源,而正數(shù)表示當(dāng)前空閑資源的數(shù)量; 2) semaphore的取值可正可負(fù),負(fù)數(shù)的絕對(duì)值表示正在等待進(jìn)入臨界區(qū)的進(jìn)程個(gè)數(shù)。 信號(hào)量是由操作系統(tǒng)來(lái)維護(hù)的,用戶(hù)進(jìn)程只能通過(guò)初始化和兩個(gè)標(biāo)準(zhǔn)原語(yǔ)(P、V原語(yǔ))來(lái)訪問(wèn)。初始化可指定一個(gè)非負(fù)整數(shù),即空閑資源總數(shù)。 P原語(yǔ):P是荷蘭語(yǔ)Proberen(測(cè)試)的首字母。為阻塞原語(yǔ),負(fù)責(zé)把當(dāng)前進(jìn)程由運(yùn)行狀態(tài)轉(zhuǎn)換為阻塞狀態(tài),直到另外一個(gè)進(jìn)程喚醒它。操作為:申請(qǐng)一個(gè)空閑資源(把信號(hào)量減1),若成功,則退出;若失
9、敗,則該進(jìn)程被阻塞; V原語(yǔ):V是荷蘭語(yǔ)Verhogen(增加)的首字母。為喚醒原語(yǔ),負(fù)責(zé)把一個(gè)被阻塞的進(jìn)程喚醒,它有一個(gè)參數(shù)表,存放著等待被喚醒的進(jìn)程信息。操作為:釋放一個(gè)被占用的資源(把信號(hào)量加1),如果發(fā)現(xiàn)有被阻塞的進(jìn)程,則選擇一個(gè)喚醒之。 P原語(yǔ)操作的動(dòng)作是: (1)sem減1; (2)若sem減1后仍大于或等于零,則進(jìn)程繼續(xù)執(zhí)行; (3)若sem減1后小于零,則該進(jìn)程被阻塞后進(jìn)入
10、與該信號(hào)相對(duì)應(yīng)的隊(duì)列中,然后轉(zhuǎn)進(jìn)程調(diào)度。 V原語(yǔ)操作的動(dòng)作是: (1)sem加1; (2)若相加結(jié)果大于零,則進(jìn)程繼續(xù)執(zhí)行; (3)若相加結(jié)果小于或等于零,則從該信號(hào)的等待隊(duì)列中喚醒一等待進(jìn)程,然后再返回原進(jìn)程繼續(xù)執(zhí)行或轉(zhuǎn)進(jìn)程調(diào)度。 PV操作對(duì)于每一個(gè)進(jìn)程來(lái)說(shuō),都只能進(jìn)行一次,而且必須成對(duì)使用。在PV原語(yǔ)執(zhí)行期間不允許有中斷的發(fā)生。 - 具體
11、PV原語(yǔ)對(duì)信號(hào)量的操作可以分為三種情況: 1) 把信號(hào)量視為一個(gè)加鎖標(biāo)志位,實(shí)現(xiàn)對(duì)一個(gè)共享變量的互斥訪問(wèn)。 實(shí)現(xiàn)過(guò)程: P(mutex); / mutex的初始值為1 訪問(wèn)該共享數(shù)據(jù); V(mutex); 非臨界區(qū); 2) 把信號(hào)量視為是某種類(lèi)型的共享資源的剩余個(gè)數(shù),實(shí)現(xiàn)對(duì)一類(lèi)共享資源的訪問(wèn)。
12、160; 實(shí)現(xiàn)過(guò)程: P(resource); / resource的初始值為該資源的個(gè)數(shù)N 使用該資源; V(resource); 非臨界區(qū); 3) 把信號(hào)量作為進(jìn)程間的同步工具 實(shí)現(xiàn)過(guò)程: 臨界區(qū)C1; P(S); V(S); 臨界
13、區(qū)C2; - 舉例說(shuō)明: 例1:某超市門(mén)口為顧客準(zhǔn)備了100輛手推車(chē),每位顧客在進(jìn)去買(mǎi)東西時(shí)取一輛推車(chē),在買(mǎi)完?yáng)|西結(jié)完帳以后再把推車(chē)還回去。試用P、V操作正確實(shí)現(xiàn)顧客進(jìn)程的同步互斥關(guān)系。 分析:把手推車(chē)視為某種資源,每個(gè)顧客為一個(gè)要互斥訪問(wèn)該資源的進(jìn)程。因此這個(gè)例子為PV原語(yǔ)的第二種應(yīng)用類(lèi)型。 解: semaphore S_CartNum; &
14、#160;/ 空閑的手推車(chē)數(shù)量,初值為100 void consumer(void) / 顧客進(jìn)程 P(S_CartNum); 買(mǎi)東西; 結(jié)帳; V(S_CartNum); 例2:桌子上有一個(gè)水果盤(pán),每一次可以往里面放入一個(gè)水果。爸爸專(zhuān)向盤(pán)子中放蘋(píng)果,兒子專(zhuān)等吃盤(pán)子中的蘋(píng)果。把爸爸、兒子看作二個(gè)進(jìn)程,試用P、V操作使這兩個(gè)進(jìn)程能正確地
15、并發(fā)執(zhí)行。 分析:爸爸和兒子兩個(gè)進(jìn)程相互制約,爸爸進(jìn)程執(zhí)行完即往盤(pán)中放入蘋(píng)果后,兒子進(jìn)程才能執(zhí)行即吃蘋(píng)果。因此該問(wèn)題為進(jìn)程間的同步問(wèn)題。 解: semaphore S_PlateNum; / 盤(pán)子容量,初值為1 semaphore S_AppleNum; / 蘋(píng)果數(shù)量,初值為0 void father( ) / 父親進(jìn)程 while(1)
16、160; P(S_PlateNum); 往盤(pán)子中放入一個(gè)蘋(píng)果; V(S_AppleNum); void son( ) / 兒子進(jìn)程 while(1)
17、0; P(S_AppleNum); 從盤(pán)中取出蘋(píng)果; V(S_PlateNum); 吃蘋(píng)果; - 另附用PV原語(yǔ)解決進(jìn)程同步與互斥問(wèn)題的例子: &
18、#160; 例3:兩個(gè)進(jìn)程PA、PB通過(guò)兩個(gè)FIFO(先進(jìn)先出)緩沖區(qū)隊(duì)列連接(如圖) PA從Q2取消息,處理后往Q1發(fā)消息;PB從Q1取消息,處理后往Q2發(fā)消息,每個(gè)緩沖區(qū)長(zhǎng)度等于傳送消息長(zhǎng)度。 Q1隊(duì)列長(zhǎng)度為n,Q2隊(duì)列長(zhǎng)度為m. 假設(shè)開(kāi)始時(shí)Q1中裝滿(mǎn)了消息,試用P、V操作解決上述進(jìn)程間通訊問(wèn)題。 解: / Q1隊(duì)列當(dāng)中的空閑緩沖區(qū)個(gè)數(shù),初值為0semaphore S_BuffNum_Q1; &
19、#160; / Q2隊(duì)列當(dāng)中的空閑緩沖區(qū)個(gè)數(shù),初值為m semaphore S_BuffNum_Q2; / Q1隊(duì)列當(dāng)中的消息數(shù)量,初值為n semaphore S_MessageNum_Q1; / Q2隊(duì)列當(dāng)中的消息數(shù)量,初值為0 semaphore S_MessageNum_Q2; void PA( ) while(1)
20、 P(S_MessageNum_Q2); 從Q2當(dāng)中取出一條消息; V(S_BuffNum_Q2); 處理消息; 生成新的消息; P(S_Buff
21、Num_Q1); 把該消息發(fā)送到Q1當(dāng)中; V(S_MessageNum_Q1); void PB( ) while(1) P(S_MessageNum_Q1);
22、60; 從Q1當(dāng)中取出一條消息; V(S_BuffNum_Q1); 處理消息; 生成新的消息; P(S_BuffNum_Q2); 把該
23、消息發(fā)送到Q2當(dāng)中; V(S_MessageNum_Q2); 例4:操作系統(tǒng)課程的期末考試即將舉行,假設(shè)把學(xué)生和監(jiān)考老師都看作進(jìn)程,學(xué)生有N人,教師1人??紙?chǎng)門(mén)口每次只能進(jìn)出一個(gè)人,進(jìn)考場(chǎng)的原則是先來(lái)先進(jìn)。當(dāng)N個(gè)學(xué)生都進(jìn)入了考場(chǎng)后,教師才能發(fā)卷子。學(xué)生交卷后即可離開(kāi)考場(chǎng),而教師要等收上來(lái)全部卷子并封裝卷子后才能離開(kāi)考場(chǎng)。 (1)問(wèn)共需設(shè)置幾個(gè)進(jìn)程?
24、 (2)請(qǐng)用P、V操作解決上述問(wèn)題中的同步和互斥關(guān)系。 解: semaphore S_Door; / 能否進(jìn)出門(mén),初值1 semaphore S_StudentReady; / 學(xué)生是否到齊,初值為0 semaphore S_ExamBegin; / 開(kāi)始考試,初值為0 semaphore S_ExamOver; &
25、#160; / 考試結(jié)束,初值為0 int nStudentNum = 0; / 學(xué)生數(shù)目 semaphore S_Mutex1; /互斥信號(hào)量,初值為1 int nPaperNum = 0; / 已交的卷子數(shù)目 semaphore S_Mutex2;
26、; /互斥信號(hào)量,初值為1 void student( ) P(S_Door); 進(jìn)門(mén); V(S_Door); P(S_Mutex1); nStudentNum +; / 增加學(xué)生的個(gè)數(shù) if(nStudentNum = N) V(S_Stude
27、ntReady); V(S_Mutex1); P(S_ExamBegin); / 等老師宣布考試開(kāi)始 考試中 交卷; P(S_Mutex2); nPaperNum +; / 增加試卷的份數(shù) if(nPaperNum =
28、 N) V(S_ExamOver); V(S_Mutex2); P(S_Door); 出門(mén); V(S_Door); void teac
29、her( ) P(S_Door); 進(jìn)門(mén); V(S_Door); P(S_StudentReady); /等待最后一個(gè)學(xué)生來(lái)喚醒 發(fā)卷子; for(i = 1; i <= N; i+)
30、160; V(S_ExamBegin); P(S_ExamOver); /等待考試結(jié)束 封裝試卷; P(S_Door); 出門(mén);
31、; V(S_Door); 例 5:某商店有兩種食品A和B,最大數(shù)量均為m個(gè)。 該商店將A、B兩種食品搭配出售,每次各取一個(gè)。為避免食品變質(zhì),遵循先到食品先出售的原則。有兩個(gè)食品公司分別不斷地供應(yīng)A、B兩種食品(每次一個(gè))。為保證正常銷(xiāo)售,當(dāng)某種食品的數(shù)量比另一種的數(shù)量超過(guò)k(k<m)個(gè)時(shí),暫停對(duì)數(shù)量大的食品進(jìn)貨,補(bǔ)充數(shù)量少的食品。 (1) 問(wèn)共需設(shè)置幾個(gè)進(jìn)程? (2) 用P、V操作解決上述問(wèn)題中的同步互斥關(guān)系。
32、160; 解: semaphore S_BuffNum_A; /A的緩沖區(qū)個(gè)數(shù), 初值m semaphore S_Num_A; / A的個(gè)數(shù),初值為0 semaphore S_BuffNum_B; /B的緩沖區(qū)個(gè)數(shù), 初值m semaphore S_Num_B; / B的個(gè)數(shù),初值為0 void Shop( ) &
33、#160; while(1) P(S_Num_A); P(S_Num_B); 分別取出A、B食品各一個(gè); V(S_BuffNum_A);
34、0; V(S_BuffNum_A); 搭配地銷(xiāo)售這一對(duì)食品; / “A食品加1,而B(niǎo)食品不變”這種情形允許出現(xiàn)的次數(shù)(許可證的數(shù)量),其值等于/k-(A-B),初值為k semaphore S_A_B; / “B食品加1,而A食品不變”這種情形允許出現(xiàn)的次數(shù)(許可證的數(shù)量),其值等于/k-(B-A),初值為k semaphore S_B_A; void Producer_A( )
35、0; while(1) 生產(chǎn)一個(gè)A食品; P(S_BuffNum_A); P(S_A_B); 向商店提供一個(gè)A食品;
36、160; V(S_Num_A); V(S_B_A); void Producer_B( ) while(1) 生產(chǎn)一個(gè)B食品; P(S_BuffNum_B);
37、0; P(S_B_A); 向商店提供一個(gè)B食品; V(S_Num_B); V(S_A_B); 例6:在一棟學(xué)生公寓里,只有一間浴室,而且這間浴室非常小,每一次只能容納一個(gè)人。公寓里既住著男生也住著女生,他們
38、不得不分享這間浴室。因此,樓長(zhǎng)制定了以下的浴室使用規(guī)則: (1)每一次只能有一個(gè)人在使用; (2)女生的優(yōu)先級(jí)要高于男生,即如果同時(shí)有男生和女生在等待使用浴室,則女生優(yōu)先; (3)對(duì)于相同性別的人來(lái)說(shuō),采用先來(lái)先使用的原則。 假設(shè): (1)當(dāng)一個(gè)男生想要使用浴室時(shí),他會(huì)去執(zhí)行一個(gè)函數(shù)boy_wants_to_use_bathroom,當(dāng)他離開(kāi)浴室時(shí),也會(huì)去執(zhí)行
39、另外一個(gè)函數(shù)boy_leaves_bathroom; (2)當(dāng)一個(gè)女生想要使用浴室時(shí),會(huì)去執(zhí)行函數(shù)girl_wants_to_use_bathroom,當(dāng)她離開(kāi)時(shí), 也會(huì)執(zhí)行函數(shù)girl_leaves_bathroom; 問(wèn)題:請(qǐng)用信號(hào)量和P、V操作來(lái)實(shí)現(xiàn)這四個(gè)函數(shù)(初始狀態(tài):浴室是空的)。 解: 信號(hào)量的定義: semaphore S_mutex; / 互斥信號(hào)量,初值均為1 semaphore S
40、_boys; / 男生等待隊(duì)列,初值為0 semaphore S_girls; / 女生等待隊(duì)列,初值為0 普通變量的定義: int boys_waiting = 0; / 正在等待的男生數(shù); int girls_waiting = 0; / 正在等待的女生數(shù); int using = 0; / 當(dāng)前是否有人在使用浴室; void boy_wants_to_us
41、e_bathroom ( ) P(S_mutex); if(using = 0) && (girls_waiting = 0) using = 1;
42、60; V(S_mutex); else boys_waiting +; V(S_mutex);
43、 P(S_boys); void boy_leaves_bathroom ( ) P(S_mutex); if(girls_waiting > 0) / 優(yōu)先喚醒女生
44、 girls_waiting -; V(S_girls); else if(boys_waiting > 0)
45、60; boys_waiting -; V(S_ boys); else &
46、#160; using = 0; / 無(wú)人在等待 V(S_mutex); void girl_wants_to_use_bathroom ( ) P(S_mutex); if(using
47、= 0) using = 1; V(S_mutex); else girls_waiting +;
48、60; V(S_mutex); P(S_girls); void girl_leaves_bathroom ( ) P(S_mutex); if(girls_waiting > 0) / 優(yōu)先喚醒女生
49、; girls_waiting -; V(S_girls); else if(boys_waiting > 0) boys_waiting -;
50、60; V(S_ boys); else using = 0; / 無(wú)人在等待
51、 V(S_mutex); 再附上幾個(gè)例子: * 用PV原語(yǔ)實(shí)現(xiàn)進(jìn)程的互斥 由于用于互斥的信號(hào)量sem與所有的并發(fā)進(jìn)程有關(guān),所以稱(chēng)之為公有信號(hào)量。公有信號(hào)量的值反映了公有資源的數(shù)量。只要把臨界區(qū)置于P(sem)和V(sem)之間,即可實(shí)現(xiàn)進(jìn)程間的互斥。就象火車(chē)中的每節(jié)車(chē)廂只有一個(gè)衛(wèi)生間,該車(chē)廂的所有旅客共享這個(gè)公有資源:衛(wèi)生間,所以旅客間必須互斥進(jìn)入衛(wèi)生間,只
52、要把衛(wèi)生間放在P(sem)和V(sem)之間,就可以到達(dá)互斥的效果。以下例子說(shuō)明進(jìn)程的互斥實(shí)現(xiàn)。 例1: 生產(chǎn)圍棋的工人不小心把相等數(shù)量的黑子和白子混裝載一個(gè)箱子里,現(xiàn)要用自動(dòng)分揀系統(tǒng)把黑子和白子分開(kāi),該系統(tǒng)由兩個(gè)并發(fā)執(zhí)行的進(jìn)程組成,功能如下: (1)進(jìn)程A專(zhuān)門(mén)揀黑子,進(jìn)程B專(zhuān)門(mén)揀白子; (2)每個(gè)進(jìn)程每次只揀一個(gè)子,當(dāng)一個(gè)進(jìn)程在揀子時(shí)不允許另一個(gè)進(jìn)程去揀子; 分析: 第一步:確定進(jìn)
53、程間的關(guān)系。由功能(2)可知進(jìn)程之間是互斥的關(guān)系。 第二步:確定信號(hào)量及其值。由于進(jìn)程A和進(jìn)程B要互斥進(jìn)入箱子去揀棋子,箱子是兩個(gè)進(jìn)程的公有資源,所以設(shè)置一個(gè)信號(hào)量s,其值取決于公有資源的數(shù)目,由于箱子只有一個(gè),s的初值就設(shè)為1。 實(shí)現(xiàn):begin s:semaphore; s:=1; cobegin process A&
54、#160; begin L1: P(s); 揀黑子; V(s);
55、0; goto L1; end; process B begin L2:P(s); &
56、#160; 揀白子; V(s); goto L2; end; coend;end; 判斷進(jìn)程間是否互斥,關(guān)鍵是看進(jìn)程間是否共享某一公有資源,一個(gè)公
57、有資源與一個(gè)信號(hào)量相對(duì)應(yīng)。確定信號(hào)量的值是一個(gè)關(guān)鍵點(diǎn),它代表了可用資源實(shí)體數(shù)。如下實(shí)例: 例2: 某車(chē)站售票廳,任何時(shí)刻最多可容納20名購(gòu)票者進(jìn)入,當(dāng)售票廳中少于20名購(gòu)票者時(shí),廳外的購(gòu)票者可立即進(jìn)入,否則需要在外面等待。每個(gè)購(gòu)票者可看成一個(gè)進(jìn)程。 分析:第一步:確定進(jìn)程間的關(guān)系。售票廳是各進(jìn)程共享的公有資源,當(dāng)售票廳中多于20名購(gòu)票者時(shí),廳外的購(gòu)票者需要在外面等待。所以進(jìn)程間是互斥的關(guān)系。第二步:確定信號(hào)量及其值。只有一個(gè)公有資源:售票廳,所以設(shè)置一個(gè)信號(hào)量s。售票廳最多容納20個(gè)進(jìn)
58、程,即可用資源實(shí)體數(shù)為20,s的初值就設(shè)為20。 實(shí)現(xiàn): begin s:semaphore; s:=20; cobegin process PI(I=1,2,) begin P(s);
59、0; 進(jìn)入售票廳; 購(gòu)票; 退出; V(s); end;
60、160; coend; end; 當(dāng)購(gòu)票者進(jìn)入售票廳前要執(zhí)行P(s)操作,執(zhí)行后若s大于或等于零,說(shuō)明售票廳的人數(shù)還未滿(mǎn)可進(jìn)入。執(zhí)行后若s小于零,則說(shuō)明售票廳的人數(shù)已滿(mǎn)不能進(jìn)入。這個(gè)實(shí)現(xiàn)中同時(shí)最多允許20個(gè)進(jìn)程進(jìn)入售票廳購(gòu)票,其余進(jìn)程只能等待。 用PV原語(yǔ)實(shí)現(xiàn)進(jìn)程的同步 與進(jìn)程互斥不同,進(jìn)程同步時(shí)的信號(hào)量只與制約進(jìn)程及被制約進(jìn)程有關(guān)而不是與整組并發(fā)進(jìn)程有關(guān),所以稱(chēng)該信號(hào)量為私有信號(hào)量。利用PV原語(yǔ)實(shí)現(xiàn)進(jìn)程同步的方法是:首先判斷進(jìn)程間的關(guān)系為同步的,且為各并發(fā)進(jìn)程設(shè)置私有信號(hào)量,然后為私有信號(hào)量賦初值,最后利用P
61、V原語(yǔ)和私有信號(hào)量規(guī)定各進(jìn)程的執(zhí)行順序。下面我們將例1增添一個(gè)條件,使其成為進(jìn)程間是同步的。 例3: 在例1的基礎(chǔ)之上再添加一個(gè)功能:(3)當(dāng)一個(gè)進(jìn)程揀了一個(gè)棋子(黑子或白子)以后,必讓另一個(gè)進(jìn)程揀一個(gè)棋子(黑子或白子)。 分析: 第一步:確定進(jìn)程間的關(guān)系。由功能(1)(2)(3)可知,進(jìn)程間的關(guān)系為同步關(guān)系。第二步:確定信號(hào)量及其值。進(jìn)程A和B共享箱子這個(gè)公有資源,但規(guī)定兩個(gè)進(jìn)程必須輪流去取不同色的棋子,因而相互間要互通消息。對(duì)于進(jìn)程A可設(shè)置一個(gè)私有信號(hào)量s1,該私有信號(hào)
62、量用于判斷進(jìn)程A是否能去揀黑子,初值為1。對(duì)于進(jìn)程B同樣設(shè)置一個(gè)私有信號(hào)量s2,該私有信號(hào)量用于判斷進(jìn)程B是否能去揀白子,初值為0。當(dāng)然你也可以設(shè)置s1初值為0,s2初值為1。 實(shí)現(xiàn): begin s1,s2:semaphore; s1:=1;s2:=0; cobegin process A
63、; begin L1: P(s1); 揀黑子; V(s2);
64、 goto L1; end; process B begin L2:P(s2); 揀白子; &
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)生實(shí)習(xí)生勞動(dòng)合同范本
- 中國(guó)美術(shù)學(xué)院《面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)踐(基于C)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西工業(yè)職業(yè)技術(shù)學(xué)院《建筑設(shè)計(jì)實(shí)訓(xùn)(五)》2023-2024學(xué)年第二學(xué)期期末試卷
- T-ZSA 272-2024 高磁導(dǎo)率低矯頑力FeNiMnSi 軟磁合金
- 二零二五年度養(yǎng)老公寓入住與心理咨詢(xún)服務(wù)合同
- 二零二五年度房屋買(mǎi)賣(mài)及家居升級(jí)借款協(xié)議
- 2025年度生鮮配送與電商渠道合作合同范本
- 二零二五年度互聯(lián)網(wǎng)公司業(yè)績(jī)對(duì)賭協(xié)議約定倍收益合同
- 2025年度退房合同租賃期滿(mǎn)通知協(xié)議
- 二零二五年度人工智能產(chǎn)業(yè)股東入股合同
- 2025年黑龍江農(nóng)墾職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)完整版
- 《汽車(chē)專(zhuān)業(yè)英語(yǔ)》2024年課程標(biāo)準(zhǔn)(含課程思政設(shè)計(jì))
- 部編四年級(jí)道德與法治下冊(cè)全冊(cè)教案(含反思)
- JBT 11699-2013 高處作業(yè)吊籃安裝、拆卸、使用技術(shù)規(guī)程
- AutoCAD 2020中文版從入門(mén)到精通(標(biāo)準(zhǔn)版)
- 煙草栽培(二級(jí))鑒定理論考試復(fù)習(xí)題庫(kù)-上(單選題匯總)
- DB32T 4353-2022 房屋建筑和市政基礎(chǔ)設(shè)施工程檔案資料管理規(guī)程
- [合同協(xié)議]車(chē)輛掛靠協(xié)議書(shū)
- 2022年怎樣使用電器正常工作導(dǎo)學(xué)案
- 【工法】衛(wèi)生間聚乙烯丙綸防水和JS防水施工工藝
- 物品出入庫(kù)明細(xì)表格
評(píng)論
0/150
提交評(píng)論