APP開發(fā)程序運行環(huán)境的進程互斥與同步的工作原理,進程互斥定義為:一組并發(fā)進程中一個或多個程序段,因共享某一共有資源而導致必須以一個不允許交叉執(zhí)行的單位執(zhí)行。也就是說互斥是要保證臨界資源在某一時刻只被一個進程訪問。APP開發(fā)公司理解進程同步定義為:把異步環(huán)境下的一組并發(fā)進程因直接制約而互相發(fā)送消息而進行互相合作、互相等待,使得各進程按一定的速度執(zhí)行的過程稱為進程同步。也就是說進程之間是異步執(zhí)行的,同步即是使各進程按一定的制約順序和速度執(zhí)行。
博納網(wǎng)絡APP開發(fā)資深工程師提示:簡單一點來說,互斥是資源的競爭關系,而同步是進程間的協(xié)作關系。
系統(tǒng)中有些資源可以供多個進程同時使用,有些資源則一次僅允許一個進程使用,將一次僅允許一個進程使用的資源稱為臨界資源,很多物理設備如打印
機、磁帶機等都屬于臨界資源,某些軟件的變量、數(shù)據(jù)、表格也不允許兩個進程同時使用,所以也是臨界資源。
進程在并發(fā)執(zhí)行中可以共享系統(tǒng)中的資源。但是臨界資源的訪問則必須互斥進行,即各進程對臨界資源進行操作的那段程序的執(zhí)行也必須是互斥的,只有這樣才能保證對臨界資源的互斥訪問。把一個進程訪問臨界資源的那段程序代碼稱為臨界區(qū),有了臨界區(qū)的概念,進程間的互斥就可以描述為:禁止兩個或兩個以上的進程同時進入訪問同一臨界資源的臨界區(qū)。為此,必須有專門的同步機構來協(xié)調(diào)它們,協(xié)調(diào)準則如下:

(1)空閑讓進。無進程處于臨界區(qū)時,若有進程要求進入臨界區(qū)則立即允許其進入;
(2)忙則等待。當已有進程進入其臨界區(qū)時,其他試圖進入各自臨界區(qū)的進程必須等待,以保證諸進程互斥地進入臨界區(qū);
(3)有限等待。有若干進程要求進入臨界區(qū)時,應在有限時間內(nèi)使一進程進入臨界區(qū),即它們不應相互等待而誰也不進入臨界區(qū);
(4)讓權等待。對于等待進入臨界區(qū)的進程必須釋放其占有的CPU。
信號量可以有效地實現(xiàn)進程的同步和互斥。在操作系統(tǒng)中,信號量是一個整數(shù)。當信號量大于等于o時,代表可供并發(fā)進程使用的資源實體數(shù),當信號量小于零時則表示正在等待使用臨界區(qū)的進程數(shù)。建立一個信號量必須說明所建信號量代表的意義和設置初值,以及建立相應的數(shù)據(jù)結構,以便指向那些等待使用該臨界區(qū)的進程。
對信號量只能施加特殊的操作:P操作和V操作。P操作和V操作都是不可分割的原子操作,也稱為原語。因此,Р原語和V原語執(zhí)行期間不允許中斷發(fā)生。
P (sem)操作的過程是將信號量sem值減l,若sem的值成負數(shù),則調(diào)用P操作的進程暫停執(zhí)行,直到另一個進程對同一信號量做V操作。V (sem)操作的過程是將信號量sem值加1,若sem的值小于等于o,從相應隊列(與sem有關的隊列)中選一個進程,喚醒它。
一般P操作與V操作的定義如下所述。P操作:
P{sem}i
sem=sem - 1;
if {sem < o}進程進入等待狀態(tài);else 繼續(xù)進行;}
V操作:
v {sem}{sem=sem + 1;
if {sem ≤ o}喚醒隊列中的一個等待進程;else繼續(xù)進行;}
為了保護共享資源(如公共變量),使它們不被多個進程同時訪問,就要阻止這些進程同時執(zhí)行訪問這些資源(臨界資源)的代碼段(臨界區(qū))﹔進程互斥不允許兩個以上共享臨界資源的并發(fā)進程同時進入臨界區(qū)。利用P、V原語和信號量可以方便地解決并發(fā)進程對臨界區(qū)的進程互斥問題。
設信號量mutex是用于互斥的信號量,初值為1,表示沒有并發(fā)進程使用該臨界區(qū)。于是各并發(fā)進程的臨界區(qū)可改寫成下列形式的代碼段:
P( mutex) ;
臨界區(qū)v (mutex) ;
要用P,V操作實現(xiàn)進程同步,需要引進私用信號量。私用信號量只與制約進程和被制約進程有關,而不是與整組并發(fā)進程相關。與此相對,進程互斥使用的信號量為公用信號量。首先為各并發(fā)進程設置私用信號量,然后為私用信號量賦初值,最后利用P,V原語和私用信號量規(guī)定各進程的執(zhí)行順序。
經(jīng)典同步問題的例子是“生產(chǎn)者一消費者”問題。這要求存后再取,取后再存,即有兩個制約關系,為此,需要兩個信號量,表示緩沖區(qū)中的空單元數(shù)和非空單元數(shù),記為Bufempty和Buffull,它們的初值分別是1和o,相應的程序段形式是:
生產(chǎn)者loop
生產(chǎn)一產(chǎn)品next;P(Bufempty) ;
next產(chǎn)品存緩沖區(qū);V(Buffull) ;
endloop
消費者loop
(Buffulll) ;V ( Bufempty) ;從緩沖區(qū)中取產(chǎn)品;使用產(chǎn)品
endloop5.前趨圖
前趨圖是一個由結點和有向邊構成的有向無循環(huán)圖。該圖通常用于表現(xiàn)事務之間先后順序的制約關系。圖中的每個結點可以表示一個語句、一個程序段或是一個進程,結點間的有向邊表示兩個結點之間存在的前趨關系。
例:在計算機中,經(jīng)常采用流水線方式執(zhí)行指令,每一條指令都可以分解為取指、分析和執(zhí)行三步。取指操作為Ai,分析操作為Bi和執(zhí)行操作為Ci(i=1,2,3)。

如圖2-4所示為三個任務各程序段并發(fā)執(zhí)行的前驅圖。
圖中Ay沒有前趨結點,稱為開始結點,它不受任何制約,可以直接執(zhí)行;而
B與A2只能在A執(zhí)行完成之后才能開始,而B,必須在B1與A,完成之后才能開始;C沒有后繼結點,稱為終止結點。
在前趨圖中,執(zhí)行先后順序的制約關系可分為兩種:直接制約和間接制約。直接制約通常是指一個操作中,多個步驟之間的制約關系,也可以說是“同步的進程之間的制約關系”。如圖2-4所示,A、B,、C,是一條指令的取指、分析、執(zhí)行的三個步驟,所以它們之間的關系是直接制約。
間接制約通常是指多個操作之間相同步驟的制約關系,也可以說是“互斥的進程之間的制約關系”。如圖2-4所示,A、A、A之間就存在間接制約的關系。
前趨圖的應用廣泛,在項目開發(fā)中,可用前趨圖來分析哪些活動可以并行完成。同時項目管理工具:Pert圖,單(雙)代號網(wǎng)絡圖等都融入了前趨圖的思想。好了,
深圳APP開發(fā)公司本文關于“程序運行環(huán)境的進程互斥與同步的工作原理”的APP項目開發(fā)前期工作經(jīng)驗就分享到這里,謝謝關注,博納網(wǎng)絡編輯整理。