版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、操操作作系系統(tǒng)統(tǒng)3.3 信號(hào)量與PV操作3.3.1同步與同步機(jī)制同步與同步機(jī)制3.3.2信號(hào)量與信號(hào)量與PV操作操作3.3.3信號(hào)量實(shí)現(xiàn)互斥信號(hào)量實(shí)現(xiàn)互斥3.3.4信號(hào)量解決五個(gè)哲學(xué)家就餐問(wèn)題信號(hào)量解決五個(gè)哲學(xué)家就餐問(wèn)題3.3.5信號(hào)量解決生產(chǎn)者信號(hào)量解決生產(chǎn)者-消費(fèi)者問(wèn)題消費(fèi)者問(wèn)題3.3.6信號(hào)量解決讀者信號(hào)量解決讀者-寫(xiě)者問(wèn)題寫(xiě)者問(wèn)題3.3.7信號(hào)量解決理發(fā)師問(wèn)題信號(hào)量解決理發(fā)師問(wèn)題1操操作作系系統(tǒng)統(tǒng)3.3.1 同步和同步機(jī)制著名的生產(chǎn)者著名的生產(chǎn)者-消費(fèi)者問(wèn)題(消費(fèi)者問(wèn)題(Producer-consumer Problem)是計(jì)算機(jī)操作系統(tǒng)中并發(fā)進(jìn)程內(nèi)在關(guān)系是計(jì)算機(jī)操作系統(tǒng)中并發(fā)進(jìn)程內(nèi)在
2、關(guān)系的一種抽象,是典型的進(jìn)程同步問(wèn)題。的一種抽象,是典型的進(jìn)程同步問(wèn)題。在操作系統(tǒng)中,生產(chǎn)者進(jìn)程可以是計(jì)算進(jìn)程、發(fā)在操作系統(tǒng)中,生產(chǎn)者進(jìn)程可以是計(jì)算進(jìn)程、發(fā)送進(jìn)程;而消費(fèi)者進(jìn)程可以是打印進(jìn)程、接收進(jìn)送進(jìn)程;而消費(fèi)者進(jìn)程可以是打印進(jìn)程、接收進(jìn)程等等。程等等。解決好生產(chǎn)者解決好生產(chǎn)者-消費(fèi)者問(wèn)題就解決好了一類(lèi)并發(fā)消費(fèi)者問(wèn)題就解決好了一類(lèi)并發(fā)進(jìn)程的同步問(wèn)題。進(jìn)程的同步問(wèn)題。2操操作作系系統(tǒng)統(tǒng)生產(chǎn)者-消費(fèi)者問(wèn)題表述 有界緩沖問(wèn)題有界緩沖問(wèn)題有有n個(gè)生產(chǎn)者和個(gè)生產(chǎn)者和m個(gè)消費(fèi)者,連接在一個(gè)有個(gè)消費(fèi)者,連接在一個(gè)有k個(gè)個(gè)單位緩沖區(qū)的有界緩沖上。其中,單位緩沖區(qū)的有界緩沖上。其中,pi和和cj都是并都是并發(fā)
3、進(jìn)程,只要緩沖區(qū)未滿,生產(chǎn)者發(fā)進(jìn)程,只要緩沖區(qū)未滿,生產(chǎn)者pi生產(chǎn)的產(chǎn)生產(chǎn)的產(chǎn)品就可投入緩沖區(qū);只要緩沖區(qū)不空,消費(fèi)者品就可投入緩沖區(qū);只要緩沖區(qū)不空,消費(fèi)者進(jìn)程進(jìn)程cj就可從緩沖區(qū)取走并消耗產(chǎn)品。就可從緩沖區(qū)取走并消耗產(chǎn)品。3操操作作系系統(tǒng)統(tǒng)生產(chǎn)者-消費(fèi)者問(wèn)題算法描述(1)int k;typedef anyitem item; /item類(lèi)型類(lèi)型item bufferk;int in=0,out=0,counter=0;4操操作作系系統(tǒng)統(tǒng)生產(chǎn)者-消費(fèi)者問(wèn)題算法描述(2)process producer(void) while (true) /無(wú)限循環(huán)無(wú)限循環(huán)produce an item i
4、n nextp;/生產(chǎn)一個(gè)產(chǎn)品生產(chǎn)一個(gè)產(chǎn)品if (counter=k) /緩沖滿時(shí),生產(chǎn)者睡眠緩沖滿時(shí),生產(chǎn)者睡眠 sleep(producer);bufferin=nextp;/將一個(gè)產(chǎn)品放入緩沖區(qū)將一個(gè)產(chǎn)品放入緩沖區(qū)in=(in+1)%k; /指針推進(jìn)指針推進(jìn)counter+; /緩沖內(nèi)產(chǎn)品數(shù)加緩沖內(nèi)產(chǎn)品數(shù)加1if(counter=1) /緩沖為空,加進(jìn)一件產(chǎn)品緩沖為空,加進(jìn)一件產(chǎn)品 wakeup(consumer);/并喚醒消費(fèi)者并喚醒消費(fèi)者 5操操作作系系統(tǒng)統(tǒng)生產(chǎn)者-消費(fèi)者問(wèn)題算法描述(3)process consumer(void) while (true) /無(wú)限循環(huán)無(wú)限循環(huán)if
5、(counter=0) /緩沖區(qū)空,消費(fèi)者睡眠緩沖區(qū)空,消費(fèi)者睡眠 sleep(consumer); nextc=bufferout;/取一個(gè)產(chǎn)品到取一個(gè)產(chǎn)品到nextc out=(out+1)%k; /指針推進(jìn)指針推進(jìn) counter-; /取走一個(gè)產(chǎn)品,計(jì)數(shù)減取走一個(gè)產(chǎn)品,計(jì)數(shù)減1if(counter=k-1) /緩沖滿了,取走一件產(chǎn)品并喚緩沖滿了,取走一件產(chǎn)品并喚 wakeup(producer); /醒生產(chǎn)者醒生產(chǎn)者consume the item in nextc;/消耗產(chǎn)品消耗產(chǎn)品 6操操作作系系統(tǒng)統(tǒng)生產(chǎn)者-消費(fèi)者問(wèn)題的算法描述(4)生產(chǎn)者和消費(fèi)者進(jìn)程對(duì)生產(chǎn)者和消費(fèi)者進(jìn)程對(duì)coun
6、ter的交的交替執(zhí)行會(huì)使其結(jié)果不唯一替執(zhí)行會(huì)使其結(jié)果不唯一 生產(chǎn)者和消費(fèi)者進(jìn)程的交替執(zhí)行生產(chǎn)者和消費(fèi)者進(jìn)程的交替執(zhí)行會(huì)導(dǎo)致進(jìn)程永遠(yuǎn)等待會(huì)導(dǎo)致進(jìn)程永遠(yuǎn)等待7操操作作系系統(tǒng)統(tǒng)3.3.2信號(hào)量與PV操作(1)前節(jié)種種方法解決臨界區(qū)調(diào)度問(wèn)題的前節(jié)種種方法解決臨界區(qū)調(diào)度問(wèn)題的缺點(diǎn)缺點(diǎn): 1)對(duì)不能進(jìn)入臨界區(qū)的進(jìn)程,采用忙式等待測(cè)試法,對(duì)不能進(jìn)入臨界區(qū)的進(jìn)程,采用忙式等待測(cè)試法,浪費(fèi)浪費(fèi)CPU時(shí)間。時(shí)間。 2)將測(cè)試能否進(jìn)入臨界區(qū)的責(zé)任推給各個(gè)競(jìng)爭(zhēng)的進(jìn)將測(cè)試能否進(jìn)入臨界區(qū)的責(zé)任推給各個(gè)競(jìng)爭(zhēng)的進(jìn)程會(huì)削弱系統(tǒng)的可靠性,加重了用戶編程負(fù)擔(dān)。程會(huì)削弱系統(tǒng)的可靠性,加重了用戶編程負(fù)擔(dān)。1965年年E.W.Dijks
7、tra提出新的同步工具提出新的同步工具-信號(hào)量和信號(hào)量和P、V操作。操作。 8操操作作系系統(tǒng)統(tǒng)信號(hào)量與PV操作(2)信號(hào)量:一種軟件資源信號(hào)量:一種軟件資源原語(yǔ):內(nèi)核中執(zhí)行時(shí)不可被中斷的過(guò)程原語(yǔ):內(nèi)核中執(zhí)行時(shí)不可被中斷的過(guò)程P操作原語(yǔ)和操作原語(yǔ)和V操作原語(yǔ)操作原語(yǔ)一個(gè)進(jìn)程在某一特殊點(diǎn)上被迫停止執(zhí)行直到接收一個(gè)進(jìn)程在某一特殊點(diǎn)上被迫停止執(zhí)行直到接收到一個(gè)對(duì)應(yīng)的特殊變量值,這種特殊變量就是到一個(gè)對(duì)應(yīng)的特殊變量值,這種特殊變量就是信信號(hào)量號(hào)量(semaphore),復(fù)雜的進(jìn)程合作需求都可以通過(guò),復(fù)雜的進(jìn)程合作需求都可以通過(guò)適當(dāng)?shù)男盘?hào)結(jié)構(gòu)得到滿足。適當(dāng)?shù)男盘?hào)結(jié)構(gòu)得到滿足。信號(hào)量的值只能通過(guò)信號(hào)量的值只
8、能通過(guò)P、V操作改變。操作改變。9操操作作系系統(tǒng)統(tǒng)信號(hào)量與PV操作(3)操作系統(tǒng)中,信號(hào)量表示操作系統(tǒng)中,信號(hào)量表示物理資源物理資源的實(shí)體,它是的實(shí)體,它是一個(gè)與隊(duì)列有關(guān)的整型變量。一個(gè)與隊(duì)列有關(guān)的整型變量。實(shí)現(xiàn)時(shí),信號(hào)量是一種實(shí)現(xiàn)時(shí),信號(hào)量是一種記錄型記錄型數(shù)據(jù)結(jié)構(gòu),有兩個(gè)數(shù)據(jù)結(jié)構(gòu),有兩個(gè)分量:一個(gè)是信號(hào)量的分量:一個(gè)是信號(hào)量的值值,另一個(gè)是信號(hào)量隊(duì)列,另一個(gè)是信號(hào)量隊(duì)列的的隊(duì)列指針隊(duì)列指針。信號(hào)量的值信號(hào)量的值(-2)(-2) 信號(hào)量隊(duì)列指針信號(hào)量隊(duì)列指針10操操作作系系統(tǒng)統(tǒng)信號(hào)量分類(lèi)信號(hào)量按其用途分為:信號(hào)量按其用途分為:公用信號(hào)量公用信號(hào)量:聯(lián)系一組并發(fā)進(jìn)程,:聯(lián)系一組并發(fā)進(jìn)程,相關(guān)的
9、進(jìn)程相關(guān)的進(jìn)程均可在此信均可在此信號(hào)量上執(zhí)行號(hào)量上執(zhí)行P、V操作,初值通常為操作,初值通常為1,用于實(shí)現(xiàn)互斥;用于實(shí)現(xiàn)互斥;私有信號(hào)量私有信號(hào)量:聯(lián)系一組并發(fā)進(jìn)程,僅允許此信號(hào)量的:聯(lián)系一組并發(fā)進(jìn)程,僅允許此信號(hào)量的擁有擁有進(jìn)程進(jìn)程執(zhí)行執(zhí)行P操作,而操作,而其它其它相關(guān)進(jìn)程執(zhí)行相關(guān)進(jìn)程執(zhí)行V操作,初值往往為操作,初值往往為0或正整數(shù),常用于實(shí)現(xiàn)同步;或正整數(shù),常用于實(shí)現(xiàn)同步;信號(hào)量按其取值分為信號(hào)量按其取值分為: 二元信號(hào)量二元信號(hào)量:值僅取:值僅取0和和1,主要用于實(shí)現(xiàn)主要用于實(shí)現(xiàn)互斥互斥 一般信號(hào)量一般信號(hào)量:計(jì)數(shù)信號(hào)量,主要用于實(shí)現(xiàn):計(jì)數(shù)信號(hào)量,主要用于實(shí)現(xiàn)同步同步11操操作作系系統(tǒng)統(tǒng)一
10、般信號(hào)量(1)設(shè)設(shè)s為一個(gè)記錄型數(shù)據(jù)結(jié)構(gòu)為一個(gè)記錄型數(shù)據(jù)結(jié)構(gòu),一個(gè)分量為整形一個(gè)分量為整形量量value,另一個(gè)為信號(hào)量隊(duì)列另一個(gè)為信號(hào)量隊(duì)列queue,P和和V操作操作原語(yǔ)定義:原語(yǔ)定義: P(s):將信號(hào)量:將信號(hào)量s減去減去l,若結(jié)果小于,若結(jié)果小于0,則,則調(diào)用調(diào)用P(s)的進(jìn)程被置成的進(jìn)程被置成等待等待信號(hào)量信號(hào)量s的狀態(tài)。的狀態(tài)。 V(s):將信號(hào)量:將信號(hào)量s加加1,若結(jié)果不大于,若結(jié)果不大于0,則,則釋放釋放一個(gè)等待信號(hào)量一個(gè)等待信號(hào)量s的進(jìn)程。的進(jìn)程。12操操作作系系統(tǒng)統(tǒng)一般信號(hào)量(2)typedef struct semaphore int value; /信號(hào)量值信號(hào)量值
11、struct pcb *list; /信號(hào)量隊(duì)列指針信號(hào)量隊(duì)列指針 ; void P(semaphore &s) s.value-; if(s.value0) sleep(s.list); void V(semaphore &s) s.value+; if(s.value=0) wakeup(s.list); 13操操作作系系統(tǒng)統(tǒng)一般信號(hào)量(3)推論推論1:若信號(hào)量:若信號(hào)量s為為正值正值,則該值等于在封鎖進(jìn)程之前對(duì)信,則該值等于在封鎖進(jìn)程之前對(duì)信號(hào)量號(hào)量s可施行的可施行的P操作數(shù),亦等于操作數(shù),亦等于s所代表的實(shí)際還可以使用所代表的實(shí)際還可以使用的的物理資源數(shù)物理資源數(shù)推論推論2:若信號(hào)量:
12、若信號(hào)量s為為負(fù)值負(fù)值,則其,則其絕對(duì)值絕對(duì)值等于登記排列在該信等于登記排列在該信號(hào)量號(hào)量s隊(duì)列之中等待的進(jìn)程個(gè)數(shù),亦即恰好等于對(duì)信號(hào)量隊(duì)列之中等待的進(jìn)程個(gè)數(shù),亦即恰好等于對(duì)信號(hào)量s實(shí)實(shí)施施P操作而被封鎖起來(lái)并進(jìn)入信號(hào)量操作而被封鎖起來(lái)并進(jìn)入信號(hào)量s隊(duì)列的隊(duì)列的進(jìn)程數(shù)進(jìn)程數(shù)推論推論3:通常,:通常,P操作意味著請(qǐng)求一個(gè)資源,操作意味著請(qǐng)求一個(gè)資源,V操作意味著釋操作意味著釋放一個(gè)資源。在一定條件下,放一個(gè)資源。在一定條件下,P操作代表掛起進(jìn)程操作,而操作代表掛起進(jìn)程操作,而V操作代表喚醒被掛起進(jìn)程的操作操作代表喚醒被掛起進(jìn)程的操作14操操作作系系統(tǒng)統(tǒng)二元信號(hào)量(1)設(shè)設(shè)s為一個(gè)記錄型數(shù)據(jù)結(jié)構(gòu)為
13、一個(gè)記錄型數(shù)據(jù)結(jié)構(gòu),一個(gè)分量為一個(gè)分量為value,它它僅能取值僅能取值0和和1,另一個(gè)分量為信號(hào)量隊(duì)列另一個(gè)分量為信號(hào)量隊(duì)列queue, 把二元信號(hào)量上的把二元信號(hào)量上的P、V操作記為操作記為BP和和BV,BP和和BV操作原語(yǔ)的定義如下:操作原語(yǔ)的定義如下:15操操作作系系統(tǒng)統(tǒng)二元信號(hào)量(2) typedef struct binary_semaphore int value; /value取值取值0 or 1 struct pcb *list; ;void BP(binary_semaphore &s) if(s.value=1) s.value=0;else sleep (s.list)
14、;void BV(binary_semaphore &s) if(s.list is empty( ) s.value=1;else wakeup(s.list);16操操作作系系統(tǒng)統(tǒng)3.3.3信號(hào)量實(shí)現(xiàn)互斥semaphore mutex; mutex=1; cobegin process Pi( ) /i=1,n P(mutex); 臨界區(qū)臨界區(qū); V(mutex); coend17操操作作系系統(tǒng)統(tǒng)信號(hào)量解決哲學(xué)家就餐問(wèn)題有五個(gè)哲學(xué)家圍坐在一圓桌旁,桌中央有一盤(pán)通心面,有五個(gè)哲學(xué)家圍坐在一圓桌旁,桌中央有一盤(pán)通心面,每人面前有一只空盤(pán)子,每?jī)扇酥g放一把叉子。每個(gè)哲學(xué)每人面前有一只空盤(pán)子,每
15、兩人之間放一把叉子。每個(gè)哲學(xué)家思考、饑餓、然后吃通心面。為了吃面,每個(gè)哲學(xué)家必須家思考、饑餓、然后吃通心面。為了吃面,每個(gè)哲學(xué)家必須獲得兩把叉子,且每人只能直接從自己左邊或右邊去取叉子獲得兩把叉子,且每人只能直接從自己左邊或右邊去取叉子 18操操作作系系統(tǒng)統(tǒng)哲學(xué)家就餐問(wèn)題(3)semaphore fork5;for (int i=0;i5;i+) forki=1;cobeginprocess philosopher_i( ) /i= 0,1,2,3,4while(true) think( ); P(forki); P(fork(i+1)%5); eat( ); V(forki); V(fork
16、(i+1)%5); coend19操操作作系系統(tǒng)統(tǒng)有若干種辦法可避免這類(lèi)死鎖上述解法可能出現(xiàn)上述解法可能出現(xiàn)永遠(yuǎn)等待永遠(yuǎn)等待,有若干種辦法可避,有若干種辦法可避免死鎖:免死鎖:至多允許四個(gè)哲學(xué)家同時(shí)吃;至多允許四個(gè)哲學(xué)家同時(shí)吃;奇數(shù)號(hào)先取左手邊的叉子,偶數(shù)號(hào)先取右手邊的奇數(shù)號(hào)先取左手邊的叉子,偶數(shù)號(hào)先取右手邊的叉子叉子;每個(gè)哲學(xué)家取到手邊的兩把叉子才吃,否則一把每個(gè)哲學(xué)家取到手邊的兩把叉子才吃,否則一把叉子也不取。叉子也不取。20操操作作系系統(tǒng)統(tǒng)哲學(xué)家就餐問(wèn)題的一種正確解 semaphore fork5;for (int i=0;i5;i+) forki= 1;cobeginprocess p
17、hilosopher_i( )/*i=0,1,2,3 */ while(true) think( );P(forki; /*i=4,P(fork0)*/P(fork(i+1)%5 );/*i=4,P(fork4)*/eat( );V(forki);V(fork(i+ 1 % 5); coend21操操作作系系統(tǒng)統(tǒng)3.3.5信號(hào)量解決生產(chǎn)者消費(fèi)者問(wèn)題一個(gè)生產(chǎn)者、一個(gè)消費(fèi)者共享一個(gè)緩沖區(qū)一個(gè)生產(chǎn)者、一個(gè)消費(fèi)者共享一個(gè)緩沖區(qū)一個(gè)生產(chǎn)者、一個(gè)消費(fèi)者共享多個(gè)緩沖區(qū)一個(gè)生產(chǎn)者、一個(gè)消費(fèi)者共享多個(gè)緩沖區(qū)多個(gè)生產(chǎn)者、多個(gè)消費(fèi)者共享多個(gè)緩沖區(qū)多個(gè)生產(chǎn)者、多個(gè)消費(fèi)者共享多個(gè)緩沖區(qū)22操操作作系系統(tǒng)統(tǒng)一個(gè)生產(chǎn)者、一
18、個(gè)消費(fèi)者共享一個(gè)緩沖區(qū)的解int B;semaphore empty; /可以使用的空緩沖區(qū)數(shù)可以使用的空緩沖區(qū)數(shù)semaphore full; /緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù)緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù)empty=1; /緩沖區(qū)內(nèi)允許放入一件產(chǎn)品緩沖區(qū)內(nèi)允許放入一件產(chǎn)品full=0; /緩沖區(qū)內(nèi)沒(méi)有產(chǎn)品緩沖區(qū)內(nèi)沒(méi)有產(chǎn)品cobeginprocess producer() while(true) produce( ); P(empty); append( ) to B; V(full); coend23process consumer() while(true) P(full);take( ) from
19、 B;V(empty);consume( ); 操操作作系系統(tǒng)統(tǒng)一個(gè)生產(chǎn)者、一個(gè)消費(fèi)者共享多個(gè)緩沖區(qū)item Bk;semaphore empty; empty=k; /可以使用的空緩沖區(qū)數(shù)可以使用的空緩沖區(qū)數(shù)semaphore full; full=0; /緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù)緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù)int in=0; /放入緩沖區(qū)指針?lè)湃刖彌_區(qū)指針int out=0; /取出緩沖區(qū)指針取出緩沖區(qū)指針 cobeginprocess producer ( ) while(true) produce( ); P(empty); append to Bin; in=(in+1)%k; V(fu
20、ll); coend 24process consumer ( ) while(true) P(full); take( ) from Bout; out=(out+1)%k; V(empty); consume( ); 操操作作系系統(tǒng)統(tǒng)多個(gè)生產(chǎn)者/消費(fèi)者、共享多個(gè)緩沖區(qū)的解item Bk;semaphore empty; empty=k; /可以使用的空緩沖區(qū)數(shù)可以使用的空緩沖區(qū)數(shù)semaphore full; full=0; /緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù)緩沖區(qū)內(nèi)可以使用的產(chǎn)品數(shù)semaphore mutex; mutex=1; /互斥信號(hào)量互斥信號(hào)量int in=0; /放入緩沖區(qū)指針?lè)湃刖?/p>
21、沖區(qū)指針int out=0; /取出緩沖區(qū)指針取出緩沖區(qū)指針 cobeginprocess producer_i ( ) while(true) produce( ); P(empty); P(mutex); append to Bin; in=(in+1)%k; V(mutex); V(full); coend 25process consumer_j ( ) while(true) P(full); P(mutex); take( ) from Bout; out=(out+1)%k; V(mutex); V(empty); consume( ); 操操作作系系統(tǒng)統(tǒng)3.3.6 信號(hào)量解決讀
22、者-寫(xiě)者問(wèn)題(1) 有兩組并發(fā)進(jìn)程:讀者和寫(xiě)者,共享有兩組并發(fā)進(jìn)程:讀者和寫(xiě)者,共享一個(gè)文件一個(gè)文件F F,要求:,要求:允許多個(gè)讀者同時(shí)執(zhí)行讀操作允許多個(gè)讀者同時(shí)執(zhí)行讀操作任一寫(xiě)者在完成寫(xiě)操作之前不允許其它讀者或?qū)懭我粚?xiě)者在完成寫(xiě)操作之前不允許其它讀者或?qū)懻吖ぷ髡吖ぷ鲗?xiě)者執(zhí)行寫(xiě)操作前,應(yīng)讓已有的寫(xiě)者和讀者全部寫(xiě)者執(zhí)行寫(xiě)操作前,應(yīng)讓已有的寫(xiě)者和讀者全部退出退出26操操作作系系統(tǒng)統(tǒng)信號(hào)量解決讀者寫(xiě)者問(wèn)題(2)int readcount=0;/讀進(jìn)程計(jì)數(shù)讀進(jìn)程計(jì)數(shù)semaphore writeblock,mutex;writeblock=1;mutex=1;cobeginprocess reade
23、r_i( ) P(mutex); readcount+; if(readcount=1) P(writeblock); V(mutex);讀文件讀文件; P(mutex);readcount-; if(readcount=0) V(writeblock);V(mutex);coend27process writer_j( ) P(writeblock); 寫(xiě)文件寫(xiě)文件; V(writeblock);操操作作系系統(tǒng)統(tǒng)3.3.7信號(hào)量解決理發(fā)師問(wèn)題(1)理發(fā)店理有一位理發(fā)師、一把理發(fā)椅和理發(fā)店理有一位理發(fā)師、一把理發(fā)椅和n把供等候把供等候理發(fā)的顧客坐的椅子理發(fā)的顧客坐的椅子如果沒(méi)有顧客,理發(fā)師便在
24、理發(fā)椅上睡覺(jué)如果沒(méi)有顧客,理發(fā)師便在理發(fā)椅上睡覺(jué)一個(gè)顧客到來(lái)時(shí),它必須叫醒理發(fā)師一個(gè)顧客到來(lái)時(shí),它必須叫醒理發(fā)師如果理發(fā)師正在理發(fā)時(shí)又有顧客來(lái)到,則如果有空如果理發(fā)師正在理發(fā)時(shí)又有顧客來(lái)到,則如果有空椅子可坐,就坐下來(lái)等待,否則就離開(kāi)椅子可坐,就坐下來(lái)等待,否則就離開(kāi)28操操作作系系統(tǒng)統(tǒng)29信號(hào)量解決理發(fā)師問(wèn)題(2)我走了,誰(shuí)愛(ài)來(lái)誰(shuí)來(lái)!操操作作系系統(tǒng)統(tǒng)信號(hào)量解決理發(fā)師問(wèn)題(3)int waiting=0;/等候理發(fā)顧客坐的椅子數(shù)等候理發(fā)顧客坐的椅子數(shù)int CHAIRS=N; /為顧客準(zhǔn)備的椅子數(shù)為顧客準(zhǔn)備的椅子數(shù)semaphore customers,barbers,mutex;customers=0;barbers=0;mutex=1;cobeginprocess barber( ) while(true) P(customers); /有顧客嗎?若無(wú)顧客,理發(fā)師睡眠有顧客嗎?若無(wú)顧客,理發(fā)師睡眠P(mutex); /若有顧客時(shí),進(jìn)入臨界區(qū)若有顧客時(shí),進(jìn)入臨界區(qū)waiting-; /等候顧客數(shù)少一個(gè)等候顧客數(shù)少一個(gè) V(bar
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年度醫(yī)療設(shè)備研發(fā)與生產(chǎn)服務(wù)合同2篇
- 二零二五年度環(huán)保產(chǎn)業(yè)技術(shù)轉(zhuǎn)移轉(zhuǎn)化合同3篇
- 二零二五年商業(yè)綜合體商鋪?zhàn)赓U及市場(chǎng)營(yíng)銷(xiāo)合作協(xié)議2篇
- 二零二五年飯館服務(wù)員勞動(dòng)合同與勞動(dòng)仲裁配套協(xié)議3篇
- 二零二四年度學(xué)校藝術(shù)教育中心場(chǎng)地承包協(xié)議3篇
- 2025年度在線教育平臺(tái)課程買(mǎi)賣(mài)合同版權(quán)擔(dān)保與內(nèi)容質(zhì)量協(xié)議4篇
- 2025年度互聯(lián)網(wǎng)+農(nóng)業(yè)科技項(xiàng)目投資合作協(xié)議范本4篇
- 2025物資設(shè)備中心目標(biāo)成本預(yù)算承包合同
- 2025技術(shù)人員產(chǎn)品軟件合同
- 監(jiān)控維修施工方案
- 《健康體檢知識(shí)》課件
- 部編版語(yǔ)文五年級(jí)下冊(cè) 第一單元 專(zhuān)項(xiàng)訓(xùn)練課外閱讀(含答案)
- 蘇少版七年級(jí)美術(shù)下冊(cè) 全冊(cè)
- 名表買(mǎi)賣(mài)合同協(xié)議書(shū)
- JTG-T-F20-2015公路路面基層施工技術(shù)細(xì)則
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)附答案
- 中西方校服文化差異研究
- 《子宮肉瘤》課件
- 《準(zhǔn)媽媽衣食住行》課件
- 給男友的道歉信10000字(十二篇)
- 客人在酒店受傷免責(zé)承諾書(shū)范本
評(píng)論
0/150
提交評(píng)論