




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第三章第三章 進(jìn)程的同步與通信進(jìn)程的同步與通信3.1 進(jìn)程同步的基本概念3.2 信號量機(jī)制3.3 經(jīng)典進(jìn)程同步問題3.4 管程機(jī)制3.5 進(jìn)程通信*進(jìn)程同步的任務(wù):進(jìn)程同步的任務(wù): 使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作,使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。從而使程序的執(zhí)行具有可再現(xiàn)性。*多道程序環(huán)境下,諸進(jìn)程之間的關(guān)系:多道程序環(huán)境下,諸進(jìn)程之間的關(guān)系: 相互獨(dú)立相互獨(dú)立 每個進(jìn)程既不影響系統(tǒng)中其它進(jìn)程的執(zhí)行,也不被其它進(jìn)程影響。每個進(jìn)程既不影響系統(tǒng)中其它進(jìn)程的執(zhí)行,也不被其它進(jìn)程影響。彼此有關(guān)彼此有關(guān) 具體表現(xiàn)為:具體表現(xiàn)為: 1 1)
2、進(jìn)程之間由于共享資源而產(chǎn)生的間接制約關(guān)系。)進(jìn)程之間由于共享資源而產(chǎn)生的間接制約關(guān)系。 2 2)進(jìn)程之間由于相互合作而產(chǎn)生的直接制約關(guān)系。)進(jìn)程之間由于相互合作而產(chǎn)生的直接制約關(guān)系。進(jìn)程同步進(jìn)程同步 解決解決1 1)的方法是:保證諸進(jìn)程)的方法是:保證諸進(jìn)程互斥互斥訪問臨界資源。訪問臨界資源。 解決解決2 2)的方法是:協(xié)調(diào)相互合作的諸進(jìn)程的執(zhí)行次序。)的方法是:協(xié)調(diào)相互合作的諸進(jìn)程的執(zhí)行次序。 -狹義的狹義的同步同步3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念一、臨界資源一、臨界資源二、臨界區(qū)二、臨界區(qū)三、利用軟件方法解決進(jìn)程互斥問題三、利用軟件方法解決進(jìn)程互斥問題四、利用硬件方法解決進(jìn)程互
3、斥問題四、利用硬件方法解決進(jìn)程互斥問題臨界資源:臨界資源:一段時間內(nèi)只允許一個進(jìn)程訪問的資源。一段時間內(nèi)只允許一個進(jìn)程訪問的資源。要求:要求:共享臨界資源的諸進(jìn)程必須共享臨界資源的諸進(jìn)程必須互斥互斥訪問臨界資源。訪問臨界資源。原因:原因: 例:生產(chǎn)者例:生產(chǎn)者-消費(fèi)者問題(消費(fèi)者問題(P62) 生產(chǎn)者(生產(chǎn)者(producer) 放產(chǎn)品;放產(chǎn)品;counter:=counter+1; 消費(fèi)者(消費(fèi)者(consumer) 取產(chǎn)品;取產(chǎn)品;counter:=counter-1; 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念一、臨界資源一、臨界資源 生產(chǎn)者生產(chǎn)者counter:=counter+1;
4、-CS 1 register1:=counter;2 register1:= register1+1;3 counter:= register1; 消費(fèi)者消費(fèi)者counter:=counter-1;-CS 4 register2:=counter;5 register2:= register2-1;6 counter:= register2;機(jī)器語言形式為:機(jī)器語言形式為:由于生產(chǎn)者和消費(fèi)者并發(fā)運(yùn)行,且共享變量由于生產(chǎn)者和消費(fèi)者并發(fā)運(yùn)行,且共享變量 counter ,造成:,造成: 可能性可能性CPU執(zhí)行順序執(zhí)行順序counter的值的值(初值為(初值為5)A1234565正確正確B45612
5、35正確正確C1245364不正確不正確D4512366不正確不正確不是不是A、B 不正確不正確 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念一、臨界資源一、臨界資源結(jié)論:結(jié)論: counter是臨界資源,生產(chǎn)者和消費(fèi)者應(yīng)互斥訪問。是臨界資源,生產(chǎn)者和消費(fèi)者應(yīng)互斥訪問。 即:雖然生產(chǎn)者、消費(fèi)者并發(fā)執(zhí)行,但在執(zhí)行即:雖然生產(chǎn)者、消費(fèi)者并發(fā)執(zhí)行,但在執(zhí)行counter的的 加加1、減、減1的語句時,只能順序進(jìn)行。的語句時,只能順序進(jìn)行。 即:只能按可能性中即:只能按可能性中A或或B的順序進(jìn)行,絕不能交替進(jìn)行。的順序進(jìn)行,絕不能交替進(jìn)行。臨界資源實例:臨界資源實例: 硬件中的打印機(jī)、磁帶機(jī)等,軟件中
6、的變量、隊列、緩硬件中的打印機(jī)、磁帶機(jī)等,軟件中的變量、隊列、緩 沖區(qū)等。沖區(qū)等。 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念一、臨界資源一、臨界資源臨界區(qū)(臨界區(qū)(CS):):每個進(jìn)程中訪問臨界資源的那段代碼。每個進(jìn)程中訪問臨界資源的那段代碼。要求:要求:為實現(xiàn)對臨界資源的互斥訪問,應(yīng)保證諸進(jìn)程為實現(xiàn)對臨界資源的互斥訪問,應(yīng)保證諸進(jìn)程互斥互斥進(jìn)入各自進(jìn)入各自 的臨界區(qū)。(兩個互斥是一致的)的臨界區(qū)。(兩個互斥是一致的)模型:模型:準(zhǔn)則:準(zhǔn)則:1.空閑讓進(jìn)空閑讓進(jìn) 2.忙則等待忙則等待 3.有限等待有限等待 4.讓權(quán)等待讓權(quán)等待 repeat entry section 進(jìn)入?yún)^(qū):進(jìn)入?yún)^(qū):檢查
7、是否可以進(jìn)入臨界區(qū)檢查是否可以進(jìn)入臨界區(qū) critical section 臨界區(qū):臨界區(qū):對臨界資源進(jìn)行操作對臨界資源進(jìn)行操作 exit section 退出區(qū):退出區(qū):釋放臨界資源以供其它進(jìn)程使用釋放臨界資源以供其它進(jìn)程使用 remainder section 剩余區(qū):剩余區(qū):until false 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念二、臨界區(qū)(二、臨界區(qū)(Critical Section)問題描述:問題描述: 兩個進(jìn)程兩個進(jìn)程P0和和P1,共享一個臨界資源,共享一個臨界資源R。算法算法1 (turn=j,表示允許進(jìn)程,表示允許進(jìn)程Pj進(jìn)入臨界區(qū))進(jìn)入臨界區(qū)) 3.1 進(jìn)程同步的
8、基本概念進(jìn)程同步的基本概念三、利用軟件方法解決進(jìn)程互斥問題三、利用軟件方法解決進(jìn)程互斥問題Process P0 : repeat while turn 0 do no-op; critical section turn:=1; remainder section until false; Process P1 : repeat while turn 1 do no-op; critical section turn:=0; remainder section until false; 缺點(diǎn):缺點(diǎn):強(qiáng)制兩進(jìn)程輪流進(jìn)入臨界區(qū);不能保證強(qiáng)制兩進(jìn)程輪流進(jìn)入臨界區(qū);不能保證“空閑讓進(jìn)空閑讓進(jìn)”。算法算法
9、2 var flag:array0.1 of boolean; (flagi=true,Pi在臨界區(qū))在臨界區(qū))Process P0 : repeat while flag1 do no-op; flag0:=true; critical section flag0:=false; remainder section until false; 缺點(diǎn):缺點(diǎn):解決了解決了“空閑讓進(jìn)空閑讓進(jìn)”,但又違背了,但又違背了“忙則等待忙則等待”。Process P1 : repeat while flag0 do no-op; flag1:=true; critical section flag1:=fal
10、se; remainder section until false; 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念三、利用軟件方法解決進(jìn)程互斥問題三、利用軟件方法解決進(jìn)程互斥問題算法算法3 var flag:array0.1 of boolean;Process P0 : repeat flag0:=true; while flag1 do no-op; critical section flag0:=false; remainder section until false; 缺點(diǎn):缺點(diǎn):解決了解決了“忙則等待忙則等待”,但又違背了,但又違背了“空閑讓進(jìn)空閑讓進(jìn)”和和 “ “有限等待有限等待”
11、。Process P1 : repeat flag1:=true; while flag0 do no-op; critical section flag1:=false; remainder section until false; 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念三、利用軟件方法解決進(jìn)程互斥問題三、利用軟件方法解決進(jìn)程互斥問題算法算法4Process P0 : repeat flag0:=true; turn:=1; while (flag1 and turn=1) do no-op; critical section flag0:=false; remainder secti
12、on until false; 是算法是算法1 1和和3 3的組合,既實現(xiàn)了的組合,既實現(xiàn)了“空閑讓進(jìn)空閑讓進(jìn)”,又保證了,又保證了 “忙則等待忙則等待”。 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念三、利用軟件方法解決進(jìn)程互斥問題三、利用軟件方法解決進(jìn)程互斥問題Process P0 : repeat flag1:=true; turn:=0; while (flag0 and turn=0) do no-op; critical section flag1:=false; remainder section until false; 缺點(diǎn):缺點(diǎn): 四種算法全部屬于四種算法全部屬于“忙等待忙
13、等待”方式。方式。 現(xiàn)在已很少使用。現(xiàn)在已很少使用。 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念三、利用軟件方法解決進(jìn)程互斥問題三、利用軟件方法解決進(jìn)程互斥問題利用利用Test-and-Set指令指令 1.Test-and-Set 指令指令 function TS(var. lock:boolean):boolean begin TS:=lock; lock:=true; endTS(lock)=lock lock=true結(jié)果結(jié)果 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念四、利用硬件方法解決進(jìn)程互斥問題四、利用硬件方法解決進(jìn)程互斥問題2. 利用利用TS指令實現(xiàn)進(jìn)程互斥的模型指令實現(xiàn)進(jìn)程
14、互斥的模型 repeat while TS(lock) do skip;-進(jìn)入?yún)^(qū)進(jìn)入?yún)^(qū) critical section; -臨界區(qū)臨界區(qū) lock:=false; -退出區(qū)退出區(qū) remainder section until false; 思路:思路: false 可以進(jìn)入可以進(jìn)入CSa)每個臨界資源每個臨界資源一個一個lock(初值(初值=false) true 不能進(jìn)入不能進(jìn)入CSb)在進(jìn)入?yún)^(qū)測試是否在進(jìn)入?yún)^(qū)測試是否 不能不能 (lock=true):忙等待忙等待 可以進(jìn)入臨界區(qū)可以進(jìn)入臨界區(qū)CS 可以可以 (lock=false)進(jìn)入進(jìn)入CS執(zhí)行執(zhí)行退出退出CS 3.1 進(jìn)程同步的基
15、本概念進(jìn)程同步的基本概念四、利用硬件方法解決進(jìn)程互斥問題四、利用硬件方法解決進(jìn)程互斥問題硬件指令的缺點(diǎn):硬件指令的缺點(diǎn): 1.1.雖可有效實現(xiàn)互斥,但屬于雖可有效實現(xiàn)互斥,但屬于“忙等待忙等待”方式,違背了方式,違背了 “ “讓權(quán)等待讓權(quán)等待”原則。原則。 2.2.很難用它解決復(fù)雜的同步問題。很難用它解決復(fù)雜的同步問題。 3.1 進(jìn)程同步的基本概念進(jìn)程同步的基本概念四、利用硬件方法解決進(jìn)程互斥問題四、利用硬件方法解決進(jìn)程互斥問題一、一、記錄型信號量機(jī)制記錄型信號量機(jī)制二、二、AND型信號量集機(jī)制型信號量集機(jī)制1965年,荷蘭科學(xué)家年,荷蘭科學(xué)家Dijkstra在在THE系統(tǒng)上提出。系統(tǒng)上提出。
16、一個信號量一個信號量S是一個整型量,除對其初始化外,它只能是一個整型量,除對其初始化外,它只能 由兩個原子操作由兩個原子操作P和和V來訪問。來訪問。P和和V的名稱來源于荷蘭文的名稱來源于荷蘭文proberen(測試)和(測試)和verhogen (增量),它們的執(zhí)行具有不可中斷性。(增量),它們的執(zhí)行具有不可中斷性。本書中將本書中將P、V操作稱做操作稱做 wait 和和 signal 操作。操作。3.2 信號量機(jī)制信號量機(jī)制定義:定義: 3.2 信號量機(jī)制信號量機(jī)制一、記錄型信號量機(jī)制一、記錄型信號量機(jī)制信號量:信號量:type semaphore=record value:integer;
17、/*信號量的值 L:list of process; /*信號量等待隊列的隊首指針 end P(s): s.value:=s.value-1; if s.value0 then blocked(s.L); V(s): s.value:=s.value+1; if s.value 0 then wakeup(s.L);實現(xiàn)進(jìn)程實現(xiàn)進(jìn)程互斥互斥:模型:模型:一個臨界資源一個臨界資源一個互斥一個互斥信號量信號量mutex(初值(初值=1) 需互斥訪問該臨界需互斥訪問該臨界 P(mutex);-進(jìn)入?yún)^(qū)進(jìn)入?yún)^(qū) 資源的每個進(jìn)程中資源的每個進(jìn)程中 CS; V(mutex);-退出區(qū)退出區(qū)實例:實例:三個進(jìn)程
18、執(zhí)行中要共享變量三個進(jìn)程執(zhí)行中要共享變量count。分析:分析:count屬于臨界資源,對其應(yīng)互斥訪問。屬于臨界資源,對其應(yīng)互斥訪問。 提問:提問:1.mutex的取值范圍?的取值范圍? 2.進(jìn)程被喚醒后,執(zhí)行哪條語句?進(jìn)程被喚醒后,執(zhí)行哪條語句?取值范圍:取值范圍:-2-2,11P P操作下一條語句操作下一條語句 3.2 信號量機(jī)制信號量機(jī)制一、記錄型信號量機(jī)制一、記錄型信號量機(jī)制var mutex:semaphore:=1; begin parbegin process1:begin repeat P(mutex); count:=count+1; V(mutex); until fals
19、e; end process2:begin repeat P(mutex); 1 count:=count+2; V(mutex); until false; end process3:begin repeat P(mutex); count:=count-1; V(mutex); until false; end parend end 2 3.2 信號量機(jī)制信號量機(jī)制一、記錄型信號量機(jī)制一、記錄型信號量機(jī)制實現(xiàn)進(jìn)程實現(xiàn)進(jìn)程同步同步: 模型:模型:一類資源一類資源一個公用一個公用信號量信號量s(初值(初值=0.n) 請求資源的進(jìn)程中:請求資源的進(jìn)程中:P(s); 釋放資源的進(jìn)程中:釋放資源的進(jìn)
20、程中:V(s);實例:實例:進(jìn)程進(jìn)程A和和B合作。合作。 A B 取數(shù)據(jù);取數(shù)據(jù); 計算數(shù)據(jù);計算數(shù)據(jù); 送數(shù)據(jù);送數(shù)據(jù); 3.2 信號量機(jī)制信號量機(jī)制一、記錄型信號量機(jī)制一、記錄型信號量機(jī)制 var s:semaphore:=0; parbegin processA:begin P(s); 取數(shù)據(jù);取數(shù)據(jù); 計算數(shù)據(jù)計算數(shù)據(jù); end processB:begin 送數(shù)據(jù);送數(shù)據(jù); V(s); end parend 執(zhí)行時兩種可能性:執(zhí)行時兩種可能性:1. 在進(jìn)程在進(jìn)程B還沒有送數(shù)據(jù)之前,進(jìn)程還沒有送數(shù)據(jù)之前,進(jìn)程 A先執(zhí)行了先執(zhí)行了P(s),結(jié)果會怎樣?,結(jié)果會怎樣?2. 進(jìn)程進(jìn)程B的的V
21、(s)操作已經(jīng)完成,進(jìn)程操作已經(jīng)完成,進(jìn)程A 才執(zhí)行了才執(zhí)行了P(s),結(jié)果會怎樣?,結(jié)果會怎樣? 1.進(jìn)程進(jìn)程A執(zhí)行執(zhí)行P(s),會使自己進(jìn)入阻,會使自己進(jìn)入阻 塞狀態(tài),直至進(jìn)程塞狀態(tài),直至進(jìn)程B送數(shù)據(jù)后執(zhí)行送數(shù)據(jù)后執(zhí)行 V(s) ,才能將它喚醒。,才能將它喚醒。2. 若進(jìn)程若進(jìn)程B的的V(s)操作已經(jīng)完成,進(jìn)操作已經(jīng)完成,進(jìn) 程程A才執(zhí)行了才執(zhí)行了P(s),則進(jìn)程,則進(jìn)程A不會不會 阻塞。它可以順利地取到數(shù)據(jù),完阻塞。它可以順利地取到數(shù)據(jù),完 成下面的操作。成下面的操作。 3.2 信號量機(jī)制信號量機(jī)制一、記錄型信號量機(jī)制一、記錄型信號量機(jī)制實例實例:Var a,b,c,d,e:semaph
22、ore:=0,0,0,0,0;begin parbegin process p1: begin ; V(a); V(b); end; process p2: begin P(a); ; V(c); end; process p3: begin P(b); ; V(d); end; process p4: begin P(c); P(d); ; V(e); end; process p5: begin P(e); ; end; parendendp1p2p3p4p5描述進(jìn)程描述進(jìn)程前趨關(guān)系前趨關(guān)系:e ea ab bc cd d 3.2 信號量機(jī)制信號量機(jī)制一、記錄型信號量機(jī)制一、記錄型信號量機(jī)
23、制描述進(jìn)程描述進(jìn)程前趨關(guān)系前趨關(guān)系:模型:模型: 與進(jìn)程同步類似;不同點(diǎn):與進(jìn)程同步類似;不同點(diǎn): 1.信號量信號量s的初值的初值=0; 2.若等信號,則在開始處執(zhí)行若等信號,則在開始處執(zhí)行P(s); 3.若發(fā)信號,則在最后處執(zhí)行若發(fā)信號,則在最后處執(zhí)行V(s); 3.2 信號量機(jī)制信號量機(jī)制一、記錄型信號量機(jī)制一、記錄型信號量機(jī)制物理含義:物理含義:信號量的值信號量的值s.value: 表示系統(tǒng)中某類可用資源的數(shù)目。表示系統(tǒng)中某類可用資源的數(shù)目。s.values.value 0 0,表示還有,表示還有 此類資源可供分配;此類資源可供分配;s.values.value 0 0,表示資源已分配完
24、畢,表示資源已分配完畢, 其絕對值表示其絕對值表示s.Ls.L鏈表中阻塞進(jìn)程的數(shù)目。鏈表中阻塞進(jìn)程的數(shù)目。P(s):請求一個單位的資源。請求一個單位的資源。V(s):釋放一個單位的資源。釋放一個單位的資源。注:注:對一個信號量的對一個信號量的P P、V V操作必是成對出現(xiàn)的,有可能操作必是成對出現(xiàn)的,有可能 集中在一個進(jìn)程中,也有可能分布在不同進(jìn)程中。集中在一個進(jìn)程中,也有可能分布在不同進(jìn)程中。 3.2 信號量機(jī)制信號量機(jī)制一、記錄型信號量機(jī)制一、記錄型信號量機(jī)制定義:定義:swait (s1,s2, ,sn ) if s1 1 and and sn 1 then for i:=1 to n
25、do si:=si-1; endfor else place the process in the waiting queue associated with the first si found with si 1,and set the PC of this process to the beginning of swait operation. endif;ssignal (s1,s2, ,sn ) for i:=1 to n do si:=si+1; remove all the process waiting in the queue associated with si into
26、the ready queue. endfor; 3.2 信號量機(jī)制信號量機(jī)制二、二、AND型信號量集機(jī)制型信號量集機(jī)制與記錄型信號量的區(qū)別:與記錄型信號量的區(qū)別: 1. 一次同時對多個信號量進(jìn)行判定;一次同時對多個信號量進(jìn)行判定; 2. 所處阻塞隊列是第一個不滿足條件的信號量的阻塞隊列;所處阻塞隊列是第一個不滿足條件的信號量的阻塞隊列; 3. 阻塞后其程序計數(shù)器被撥回到阻塞后其程序計數(shù)器被撥回到swait開始位置;開始位置; 4. ssignal時,將全部信號量阻塞隊列中的全部阻塞進(jìn)程時,將全部信號量阻塞隊列中的全部阻塞進(jìn)程 喚醒。喚醒?;舅枷耄夯舅枷耄?資源一次性分配(要么全分配,要么
27、一個也不分配),資源一次性分配(要么全分配,要么一個也不分配), 進(jìn)程用完后再一起釋放。進(jìn)程用完后再一起釋放。 3.2 信號量機(jī)制信號量機(jī)制二、二、AND型信號量集機(jī)制型信號量集機(jī)制一、生產(chǎn)者一、生產(chǎn)者-消費(fèi)者問題消費(fèi)者問題二、二、讀者讀者-寫者問題寫者問題三、哲學(xué)家就餐問題三、哲學(xué)家就餐問題3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題問題描述:問題描述: 一群生產(chǎn)者進(jìn)程在生產(chǎn)消息,并將此消息提供給消費(fèi)者進(jìn)一群生產(chǎn)者進(jìn)程在生產(chǎn)消息,并將此消息提供給消費(fèi)者進(jìn)程去消費(fèi)。為使生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程能并發(fā)執(zhí)行,在它們程去消費(fèi)。為使生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程能并發(fā)執(zhí)行,在它們之間設(shè)置了一個具有個之間設(shè)置了一個具
28、有個n緩沖區(qū)的緩沖池,生產(chǎn)者進(jìn)程可以將緩沖區(qū)的緩沖池,生產(chǎn)者進(jìn)程可以將它所生產(chǎn)的消息放入一個緩沖區(qū)中,消費(fèi)者進(jìn)程可以從一個緩它所生產(chǎn)的消息放入一個緩沖區(qū)中,消費(fèi)者進(jìn)程可以從一個緩沖區(qū)中取得一個消息消費(fèi)。規(guī)定:不允許消費(fèi)者進(jìn)程到一個空沖區(qū)中取得一個消息消費(fèi)。規(guī)定:不允許消費(fèi)者進(jìn)程到一個空緩沖區(qū)中取消息,也不允許生產(chǎn)者進(jìn)程向一個已裝有消息且尚緩沖區(qū)中取消息,也不允許生產(chǎn)者進(jìn)程向一個已裝有消息且尚未被取走消息的緩沖區(qū)中投放消息。未被取走消息的緩沖區(qū)中投放消息。 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題一、生產(chǎn)者一、生產(chǎn)者- -消費(fèi)者問題消費(fèi)者問題一組生產(chǎn)者一組生產(chǎn)者一組消費(fèi)者一組消費(fèi)者 1 10 0
29、n-1n-1inin順序放順序放順序取順序取outout利用記錄型信號量解決利用記錄型信號量解決 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題一、生產(chǎn)者一、生產(chǎn)者- -消費(fèi)者問題消費(fèi)者問題1.1.基本工作:基本工作:生產(chǎn)者:生產(chǎn)消息;放消息。生產(chǎn)者:生產(chǎn)消息;放消息。 消費(fèi)者:取消息;消費(fèi)消息。消費(fèi)者:取消息;消費(fèi)消息。3.3.同步同步:生產(chǎn)者:放生產(chǎn)者:放 有空緩沖區(qū):放有空緩沖區(qū):放 無空緩沖區(qū):阻塞無空緩沖區(qū):阻塞 消費(fèi)者:取消費(fèi)者:取 有滿緩沖區(qū):取有滿緩沖區(qū):取 無滿緩沖區(qū):阻塞無滿緩沖區(qū):阻塞 喚醒喚醒設(shè)兩個公用信號量設(shè)兩個公用信號量 empty:空緩沖區(qū)的數(shù)目(初值:空緩沖區(qū)的數(shù)目(
30、初值= =n) full: 滿緩沖區(qū)的數(shù)目(初值滿緩沖區(qū)的數(shù)目(初值= =0)2.2.互斥:互斥:臨界資源(緩沖池)臨界資源(緩沖池)一個互斥信號量一個互斥信號量mutex(初值(初值=1)Var mutex, empty, full:semaphore:=1, n, 0; buffer:array0.n-1 of item; in, out:integer:=0, 0;begin parbegin producer: begin repeat until false; end consumer: begin repeat until false end parendendproduce an
31、 item in nextp;buffer(in):=nextp;in:=(in+1) mod n; P(mutex); V(mutex);P(empty);V(full);nextc:=buffer(out);out:=(out+1) mod n; consume an item in nextc;P(mutex); V(mutex);P(full);V(empty);注意:注意:要先對公用信號量執(zhí)行要先對公用信號量執(zhí)行P P操作,再對互斥信號量執(zhí)行操作,再對互斥信號量執(zhí)行 P P操作,否則可能引起死鎖操作,否則可能引起死鎖! 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題一、生產(chǎn)者一、生產(chǎn)者-
32、-消費(fèi)者問題消費(fèi)者問題例:分別交換生產(chǎn)者進(jìn)程中以及消費(fèi)例:分別交換生產(chǎn)者進(jìn)程中以及消費(fèi)者進(jìn)程中的兩個者進(jìn)程中的兩個P P操作的順序。當(dāng)操作的順序。當(dāng)mutex=1,empty=0,full=n 時,生產(chǎn)時,生產(chǎn)者先占用者先占用CPU執(zhí)行,結(jié)果會怎樣?執(zhí)行,結(jié)果會怎樣? 生產(chǎn)者:生產(chǎn)者: 消費(fèi)者:消費(fèi)者: P(mutex); P(mutex); P(empty); P(full); 放消息;放消息; 取消息;取消息; V(mutex); V(mutex); V(full); V(empty);交換兩個交換兩個V操作不操作不 會有任何問題。會有任何問題。還有一種引發(fā)死鎖還有一種引發(fā)死鎖的可能性,是
33、什么?的可能性,是什么?利用利用AND型信號量解決:型信號量解決:(不會引發(fā)死鎖)(不會引發(fā)死鎖) 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題一、生產(chǎn)者一、生產(chǎn)者- -消費(fèi)者問題消費(fèi)者問題begin parbegin producer: begin repeat produce an item in nextp; swait(empty, mutex); buffer(in):=nextp; in:=(in+1) mod n; ssignal(mutex, full); until false; end consumer: begin repeat swait(full, mutex); nex
34、tc:=buffer(out); out:=(out+1) mod n; ssignal(mutex, empty); consume an item in nextc; until false end parend end 問題描述:問題描述: 一個數(shù)據(jù)對象可被多個進(jìn)程共享。其中有些進(jìn)程要求讀;一個數(shù)據(jù)對象可被多個進(jìn)程共享。其中有些進(jìn)程要求讀;另一些進(jìn)程要求寫或修改。我們把只要求讀的進(jìn)程稱為另一些進(jìn)程要求寫或修改。我們把只要求讀的進(jìn)程稱為 “reader進(jìn)程進(jìn)程”,其它稱為,其它稱為“writer進(jìn)程進(jìn)程”。允許多個。允許多個reader進(jìn)進(jìn)程同時讀共享的數(shù)據(jù)對象,但絕不允許一個程同時讀共享
35、的數(shù)據(jù)對象,但絕不允許一個 writer進(jìn)程和其它進(jìn)程和其它writer進(jìn)程或進(jìn)程或reader進(jìn)程同時訪問該共享的數(shù)據(jù)對象。(多個進(jìn)程同時訪問該共享的數(shù)據(jù)對象。(多個讀者和多個寫者間的關(guān)系)讀者和多個寫者間的關(guān)系) 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題二、讀者二、讀者- -寫者問題寫者問題利用記錄型信號量解決利用記錄型信號量解決1.1.基本工作:基本工作: reader(讀者):讀數(shù)據(jù)對象。讀者):讀數(shù)據(jù)對象。 writer(寫者):寫數(shù)據(jù)對象。寫者):寫數(shù)據(jù)對象。3.3.互斥:互斥: 數(shù)據(jù)對象數(shù)據(jù)對象互斥信號量互斥信號量wmutex(初值(初值=1),用于讀者進(jìn)程,用于讀者進(jìn)程 和寫者
36、進(jìn)程互斥訪問數(shù)據(jù)對象。和寫者進(jìn)程互斥訪問數(shù)據(jù)對象。 寫者寫者-與其它寫者、所有讀者都要互斥。與其它寫者、所有讀者都要互斥。 讀者讀者-可與其它讀者同時讀(不互斥),但要與所有寫者可與其它讀者同時讀(不互斥),但要與所有寫者 互斥。互斥。 2.2.同步:同步:無,因要求中沒有說明讀者和寫者要合作無,因要求中沒有說明讀者和寫者要合作。 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題二、讀者二、讀者- -寫者問題寫者問題利用記錄型信號量解決利用記錄型信號量解決 某個讀者:想進(jìn)入讀某個讀者:想進(jìn)入讀 寫者正在寫,該讀者阻塞寫者正在寫,該讀者阻塞 其它讀者在讀,該讀者可進(jìn)入其它讀者在讀,該讀者可進(jìn)入 正在讀正
37、在讀 寫者想進(jìn)入寫,該寫者阻塞寫者想進(jìn)入寫,該寫者阻塞 其它讀者想進(jìn)入讀,可以進(jìn)入其它讀者想進(jìn)入讀,可以進(jìn)入 故讀者:進(jìn)入時判斷寫者是否在內(nèi),讀完后要釋放數(shù)據(jù)對象。故讀者:進(jìn)入時判斷寫者是否在內(nèi),讀完后要釋放數(shù)據(jù)對象。 第一個要求進(jìn)入的讀者第一個要求進(jìn)入的讀者 最后一個離開的讀者最后一個離開的讀者 增加變量增加變量readcount,來表示正在讀的讀者數(shù)目。,來表示正在讀的讀者數(shù)目。由于多個讀者共享由于多個讀者共享readcount ,故也應(yīng)作為臨界資源處理。,故也應(yīng)作為臨界資源處理。 設(shè)互斥信號量設(shè)互斥信號量rmutex(初值(初值=1),用于讀者互斥訪問,用于讀者互斥訪問readcount
38、。 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題二、讀者二、讀者- -寫者問題寫者問題Var rmutex, wmutex:semaphore:=1, 1; readcount:integer:=0;begin parbegin reader: begin repeat P(rmutex); if readcount=0 then P(wmutex); readcount:=readcount+1; V(rmutex); perform read operation; P(rmutex); readcount:=readcount-1; if readcount=0 then V(wmutex);
39、 V(rmutex); until false end writer:begin repeat P(wmutex); perform write operation; V(wmutex); until false; end parendend提問:提問:1.1.reader中的第一個中的第一個signal(rmutex)和第二個和第二個 wait(rmutex) 能否去掉?能否去掉?2.2.若一個寫者進(jìn)程正在寫數(shù)據(jù)對象,問每個讀者進(jìn)程和若一個寫者進(jìn)程正在寫數(shù)據(jù)對象,問每個讀者進(jìn)程和 其它寫者進(jìn)程所在位置?(要求從狀態(tài)、所在隊列及其它寫者進(jìn)程所在位置?(要求從狀態(tài)、所在隊列及 執(zhí)行到哪個語句三方
40、面來說明)執(zhí)行到哪個語句三方面來說明) 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題二、讀者二、讀者- -寫者問題寫者問題問題描述:問題描述: 有有5位位哲學(xué)家,他們的生活方哲學(xué)家,他們的生活方式是交替進(jìn)行思考和就餐。哲學(xué)式是交替進(jìn)行思考和就餐。哲學(xué)家們共用一張圓桌,分別坐在周家們共用一張圓桌,分別坐在周圍的五張椅子上。在圓桌上有五圍的五張椅子上。在圓桌上有五支筷子,每個哲學(xué)家饑餓時必須支筷子,每個哲學(xué)家饑餓時必須拿到其左、右最靠近他的各一支拿到其左、右最靠近他的各一支筷子時才能就餐。進(jìn)餐畢,放下筷子時才能就餐。進(jìn)餐畢,放下筷子又繼續(xù)思考。筷子又繼續(xù)思考。 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題
41、三、哲學(xué)家就餐問題三、哲學(xué)家就餐問題1203401234示意圖示意圖利用記錄型信號量解決利用記錄型信號量解決1.1.基本工作基本工作:哲學(xué)家:思考;就餐。哲學(xué)家:思考;就餐。2.2.同步同步:無。無。3.3.互斥互斥:臨界資源是筷子臨界資源是筷子 一支筷子一支筷子( (編號為編號為i) )一個互斥信號量一個互斥信號量chopsticki(初值(初值=1)。)。 提問:此算法有無問題?如何解決?提問:此算法有無問題?如何解決? 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題三、哲學(xué)家就餐問題三、哲學(xué)家就餐問題var chopstick: array 0.4 of semaphore:=1, 1, 1,
42、 1, 1; begin parbegin process i ( i=0, 1, 2, 3, 4): begin repeat think; P(chopsticki); P(chopsticki+1 mod 5); eat; V(chopsticki); V(chopsticki+1 mod 5); until false; end parend end 3.3 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題三、哲學(xué)家就餐問題三、哲學(xué)家就餐問題一、管程的定義一、管程的定義二、互斥和同步二、互斥和同步三、利用管程解決生產(chǎn)者三、利用管程解決生產(chǎn)者-消費(fèi)者問題消費(fèi)者問題信號量機(jī)制為互斥、同步問題的解決提供了有
43、效和靈活信號量機(jī)制為互斥、同步問題的解決提供了有效和靈活 的工具,但用信號量編寫一個正確的程序比較困難。的工具,但用信號量編寫一個正確的程序比較困難。Hoare(1974)和和Hansen(1975)提出了一種高級的同步原語,提出了一種高級的同步原語, 稱為管程。它與信號量機(jī)制功能等價,且更容易控制。稱為管程。它與信號量機(jī)制功能等價,且更容易控制。3.4 管程機(jī)制管程機(jī)制管程:管程:管程是一個由一或多個過程、初始化代碼及局部變管程是一個由一或多個過程、初始化代碼及局部變 量組成的集合。其主要特性如下:量組成的集合。其主要特性如下: 1. 局部于管程的變量僅能被管程內(nèi)部的過程訪問,而不能局部于管
44、程的變量僅能被管程內(nèi)部的過程訪問,而不能 被任何外部過程訪問。被任何外部過程訪問。 2. 一個進(jìn)程通過調(diào)用管程內(nèi)的一個過程而進(jìn)入管程。一個進(jìn)程通過調(diào)用管程內(nèi)的一個過程而進(jìn)入管程。 3. 任一時刻管程中只能有一個活躍進(jìn)程。即任一時刻只能任一時刻管程中只能有一個活躍進(jìn)程。即任一時刻只能 有一個進(jìn)程在管程中執(zhí)行,其它想進(jìn)入管程的進(jìn)程阻塞,有一個進(jìn)程在管程中執(zhí)行,其它想進(jìn)入管程的進(jìn)程阻塞, 等待管程可用。等待管程可用。 3.4 管程機(jī)制管程機(jī)制一、管程的定義一、管程的定義管程的描述:管程的描述:type monitor-name=monitor variable declaration; proced
45、ure entry p1(); begin end; procedure entry p2(); begin end; procedure entry pn(); begin end; begin initialization code; end 管程的示意圖:管程的示意圖:共享數(shù)據(jù)共享數(shù)據(jù)操作過程操作過程初始化代碼初始化代碼進(jìn)入隊列進(jìn)入隊列xy相應(yīng)于條件變相應(yīng)于條件變量量x x和和y y的隊列的隊列 3.4 管程機(jī)制管程機(jī)制一、管程的定義一、管程的定義互斥:互斥: 3.4 管程機(jī)制管程機(jī)制二、互斥與同步二、互斥與同步管程的第管程的第3 3個特性,使它們能有效的完成互斥。個特性,使它們能有效的
46、完成互斥。進(jìn)入管程時的互斥由編譯器負(fù)責(zé),寫管程的人無需關(guān)心。進(jìn)入管程時的互斥由編譯器負(fù)責(zé),寫管程的人無需關(guān)心。同步:同步:條件變量條件變量及兩個相關(guān)操作及兩個相關(guān)操作wait和和signal 條件變量(條件變量(condition variables) x :表示等待原因。表示等待原因。 x.wait:執(zhí)行該操作的進(jìn)程阻塞,直至其它進(jìn)程執(zhí)行執(zhí)行該操作的進(jìn)程阻塞,直至其它進(jìn)程執(zhí)行x.signal。 x.signal:喚醒喚醒x等待等待隊列中的一個進(jìn)程。如果隊列中的一個進(jìn)程。如果x等待隊列中無進(jìn)等待隊列中無進(jìn) 程阻塞,該操作不產(chǎn)生任何作用。程阻塞,該操作不產(chǎn)生任何作用。 3.4 管程機(jī)制管程機(jī)制二
47、、互斥與同步二、互斥與同步說明:說明: 進(jìn)程進(jìn)程Q因執(zhí)行因執(zhí)行x.wait處于處于阻塞狀態(tài),后來進(jìn)程阻塞狀態(tài),后來進(jìn)程P執(zhí)行了執(zhí)行了x.signal而而將進(jìn)程將進(jìn)程Q喚醒。為了避免管程中同時有兩個活躍進(jìn)程,需要有喚醒。為了避免管程中同時有兩個活躍進(jìn)程,需要有一條規(guī)則來決定讓一條規(guī)則來決定讓P和和Q誰執(zhí)行、誰阻塞。誰執(zhí)行、誰阻塞。 處理方式處理方式1:P執(zhí)行;執(zhí)行;Q等待。等待。 處理方式處理方式2:Q執(zhí)行;執(zhí)行;P等待。(等待。(Hoare采用)采用) 處理方式處理方式3:執(zhí)行:執(zhí)行signal的進(jìn)程必須立即退出管程,即的進(jìn)程必須立即退出管程,即signal語語 句只可能作為一個管程過程的最后
48、一條語句。句只可能作為一個管程過程的最后一條語句。 (Hansen建議)建議) 3.4 管程機(jī)制管程機(jī)制三、利用管程解決生產(chǎn)者三、利用管程解決生產(chǎn)者- -消費(fèi)者問題消費(fèi)者問題type producer-consumer=monitor var in,out,count: integer; buffer: array0.n-1 of item; notfull,notempty: condition; procedure entry put(item) begin if count n then notfull.wait; buffer(in):=item; in:=(in+1) mod n;
49、count:=count+1; if count=1then notempty.signal; endprocedure entry get(item) begin if count 0 then notempty.wait; item:=buffer(out); out:=(out+1) mod n; count:=count-1; if count=n-1then notfull.signal; end begin in:=out:=0; count:=0; end管程管程定義定義 3.4 管程機(jī)制管程機(jī)制三、利用管程解決生產(chǎn)者三、利用管程解決生產(chǎn)者- -消費(fèi)者問題消費(fèi)者問題produce
50、r: begin repeat produce an item in nextp; producer-consumer.put(nextp); until false; endconsumer: begin repeat producer-consumer.get(nextc); consume the item in nextc; until false; end進(jìn)程調(diào)用進(jìn)程調(diào)用 進(jìn)程通信進(jìn)程通信IPC(Inter Process Communication) 指合作進(jìn)程之間的信息交換。指合作進(jìn)程之間的信息交換。方式:方式: 1. 低級通信方式:信號量和管程低級通信方式:信號量和管程 信號量
51、的缺點(diǎn):一次只傳遞一個信號量,大量信息的傳遞需借信號量的缺點(diǎn):一次只傳遞一個信號量,大量信息的傳遞需借 助共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行,而共享數(shù)據(jù)結(jié)構(gòu)的定義助共享數(shù)據(jù)結(jié)構(gòu)進(jìn)行,而共享數(shù)據(jù)結(jié)構(gòu)的定義 和操作以及同步控制均要由程序員自己實現(xiàn)。和操作以及同步控制均要由程序員自己實現(xiàn)。 管程的缺點(diǎn):管程在少數(shù)幾種編程語言以外無法使用。管程的缺點(diǎn):管程在少數(shù)幾種編程語言以外無法使用。 2. 高級通信方式:例如消息傳遞系統(tǒng)高級通信方式:例如消息傳遞系統(tǒng) 優(yōu)勢:一次可以傳遞大量信息;進(jìn)程中使用通信命令即可通信;優(yōu)勢:一次可以傳遞大量信息;進(jìn)程中使用通信命令即可通信; 通信過程由通信過程由OS實現(xiàn)。實現(xiàn)。 3.5 進(jìn)程通
52、信進(jìn)程通信作為同步工具有效,作為通信工具低級說明:說明: 3.5 進(jìn)程通信進(jìn)程通信一、消息傳遞系統(tǒng)(一、消息傳遞系統(tǒng)(Message Passing System)消息傳遞系統(tǒng)至少要提供兩個操作:發(fā)送消息消息傳遞系統(tǒng)至少要提供兩個操作:發(fā)送消息send(message) 和接收消息和接收消息receive(message)。如果進(jìn)程如果進(jìn)程P和和Q想要通信,它們必須互相發(fā)送消息和接收消想要通信,它們必須互相發(fā)送消息和接收消 息;并且在它們之間一定存在著一條通信鏈路(息;并且在它們之間一定存在著一條通信鏈路(communication link)。)。 通信鏈路和通信鏈路和send/receiv
53、e操作的邏輯實現(xiàn)方法:操作的邏輯實現(xiàn)方法: 直接或間接通信直接或間接通信對稱或非對稱地址對稱或非對稱地址有容量或無容量的緩沖區(qū)有容量或無容量的緩沖區(qū)定長或變長消息定長或變長消息 直接通信:直接通信: 要通信的每個進(jìn)程必須明確指出發(fā)送進(jìn)程或接收進(jìn)程的標(biāo)識符。要通信的每個進(jìn)程必須明確指出發(fā)送進(jìn)程或接收進(jìn)程的標(biāo)識符。send和和receive原語的格式原語的格式: send ( P, message )-發(fā)送消息給進(jìn)程發(fā)送消息給進(jìn)程P; receive ( Q, message)-接收來自進(jìn)程接收來自進(jìn)程Q的消息。的消息。通信鏈路的性質(zhì):通信鏈路的性質(zhì): 1. 要通信的一對進(jìn)程之間的通信鏈路是自動建
54、立的。進(jìn)程只需要通信的一對進(jìn)程之間的通信鏈路是自動建立的。進(jìn)程只需 知道彼此的標(biāo)識符。知道彼此的標(biāo)識符。 2. 一條鏈路只連接一對進(jìn)程。(點(diǎn)到點(diǎn)連接)一條鏈路只連接一對進(jìn)程。(點(diǎn)到點(diǎn)連接) 3. 每對進(jìn)程之間只存在一條鏈路。每對進(jìn)程之間只存在一條鏈路。 3.5 進(jìn)程通信進(jìn)程通信一、消息傳遞系統(tǒng)(一、消息傳遞系統(tǒng)(Message Passing System)這種這種send/receive原語展示的是原語展示的是對稱地址對稱地址。即發(fā)送進(jìn)程和接收。即發(fā)送進(jìn)程和接收 進(jìn)程都要指出對方的標(biāo)識符。進(jìn)程都要指出對方的標(biāo)識符。非對稱地址方式下非對稱地址方式下send和和receive原語的格式原語的格式
55、: send ( P, message )-發(fā)送消息給進(jìn)程發(fā)送消息給進(jìn)程P; receive ( id, message)-接收從任一進(jìn)程發(fā)來的消息。接收從任一進(jìn)程發(fā)來的消息。id是是 receive操作操作的返回值,表示本次接收的返回值,表示本次接收 來的消息的發(fā)送者是誰。來的消息的發(fā)送者是誰。直接通信的缺點(diǎn):直接通信的缺點(diǎn): 一個進(jìn)程的標(biāo)識符發(fā)生改變,則與之通信的所有進(jìn)程都要修改一個進(jìn)程的標(biāo)識符發(fā)生改變,則與之通信的所有進(jìn)程都要修改 通信原語中的相應(yīng)標(biāo)識符。通信原語中的相應(yīng)標(biāo)識符。 3.5 進(jìn)程通信進(jìn)程通信一、消息傳遞系統(tǒng)(一、消息傳遞系統(tǒng)(Message Passing System)間
56、接通信:間接通信: 通信進(jìn)程利用通信進(jìn)程利用信箱信箱傳遞消息。但只有在獲得一個可共享的信箱傳遞消息。但只有在獲得一個可共享的信箱 的前提下,進(jìn)程間才可通信。的前提下,進(jìn)程間才可通信。send和和receive原語的格式:原語的格式: send ( A, message )-將消息發(fā)送到信箱將消息發(fā)送到信箱A; receive ( A, message)-從信箱從信箱A接收消息。接收消息。通信鏈路的性質(zhì):通信鏈路的性質(zhì): 1. 僅當(dāng)要通信的一對進(jìn)程具有可以共享的信箱時,通信鏈路僅當(dāng)要通信的一對進(jìn)程具有可以共享的信箱時,通信鏈路 才能建立。才能建立。 2. 一條鏈路可以連接多個進(jìn)程。(多點(diǎn)連接)一
57、條鏈路可以連接多個進(jìn)程。(多點(diǎn)連接) 3. 每對通信進(jìn)程之間可以存在多條鏈路,但每條鏈路上只有每對通信進(jìn)程之間可以存在多條鏈路,但每條鏈路上只有 一個信箱。一個信箱。 3.5 進(jìn)程通信進(jìn)程通信一、消息傳遞系統(tǒng)(一、消息傳遞系統(tǒng)(Message Passing System)信箱:信箱: 每個信箱的標(biāo)識符是唯一的。每個信箱的標(biāo)識符是唯一的。 信箱的擁有者可以是信箱的擁有者可以是OS,也可以是用戶進(jìn)程。歸也可以是用戶進(jìn)程。歸OS所有的信箱是所有的信箱是 獨(dú)立的,它不附屬于任何進(jìn)程。獨(dú)立的,它不附屬于任何進(jìn)程。 如果如果OS提供了有關(guān)信箱的創(chuàng)建、撤消及通過信箱發(fā)送和接收消息的提供了有關(guān)信箱的創(chuàng)建、撤
58、消及通過信箱發(fā)送和接收消息的 原語,則一個用戶進(jìn)程可為自己建立一個信箱,它就是該信箱的擁原語,則一個用戶進(jìn)程可為自己建立一個信箱,它就是該信箱的擁 有者。當(dāng)它終止時,該信箱自動消失。有者。當(dāng)它終止時,該信箱自動消失。 進(jìn)一步說明:進(jìn)一步說明: 1. 要區(qū)分信箱的擁有者(只能從該信箱接收消息)和使用者(只能要區(qū)分信箱的擁有者(只能從該信箱接收消息)和使用者(只能 向該信箱發(fā)消息)。向該信箱發(fā)消息)。 2. 信箱創(chuàng)建后,其所有權(quán)和接收權(quán)可以通過系統(tǒng)調(diào)用命令傳遞給其信箱創(chuàng)建后,其所有權(quán)和接收權(quán)可以通過系統(tǒng)調(diào)用命令傳遞給其 它進(jìn)程,這就可能導(dǎo)致一個信箱有多個接收者。它進(jìn)程,這就可能導(dǎo)致一個信箱有多個接收者。 3.5 進(jìn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019-2025年一級注冊建筑師之設(shè)計前期與場地設(shè)計能力測試試卷B卷附答案
- 2025年建筑工程合同風(fēng)險評估與控制策略研究
- 西寧eps線條施工方案
- 成就分享的年度績效評估計劃
- 高科技行業(yè)年度工作目標(biāo)設(shè)定計劃
- emba培訓(xùn)課程合同樣本
- 教師課堂評價體系計劃
- epc項目監(jiān)理合同樣本
- 農(nóng)機(jī)撒糞機(jī)租賃合同樣本
- 2025工程咨詢合同 標(biāo)準(zhǔn)版 模板
- 浙江省杭州市2024年中考英語真題(含答案)
- 2024年高等教育法學(xué)類自考-00249國際私法考試近5年真題附答案
- 外研版(2021)中職英語基礎(chǔ)模塊1 Unit 8 Enjoy the Festivals Listening&Speaking 教案
- 2024年汽車駕駛員(技師)職業(yè)鑒定理論考試題庫(含答案)
- 2024年青島市中考數(shù)學(xué)試卷(含答案解析)+2023年試卷及答案詳解
- GB/T 15568-2024通用型片狀模塑料(SMC)
- 冷庫建設(shè)日常運(yùn)營與維護(hù)保養(yǎng)方案
- 【真題】2024年鎮(zhèn)江市中考道德與法治試卷(含答案解析)
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗人員理論考試題庫及答案
- 監(jiān)理見證取樣工作計劃
- 廣東省廣州市白云區(qū)2023-2024學(xué)年五年級下學(xué)期期末數(shù)學(xué)試題
評論
0/150
提交評論