程序互斥和同步

2021-08-28 20:34:45 字數 1595 閱讀 7016

一組併發程序中的乙個或多個程式段,因共享某一公有資源而導致它們必須以乙個不允許交叉執行的單位執行。即不允許兩個以上的共享該資源的併發程序同時進入臨界區稱為互斥

而一次僅允許乙個程序使用的資源稱為臨界資源(critical resource)

考察鎖位的值

若原來的值是為「0」,將鎖位置為「1」

(占用該資源)

若原來值是為「1」,該資源已被別人占用),則轉到第1步

當程序使用完資源後,將鎖位置為「0 」 ,稱為開鎖操作

訊號燈是乙個確定的二元陣列(s,q)

訊號燈的值僅能由p、v操作來改變。

在實際作業系統中,一般情況下是由機器硬體提供p、v操作的指令。若機器不提供p、v操作的指令,則作業系統提供p、v操作原語

假定緩衝區buffer是乙個有界緩衝區,可存放n個資料,同時假定有k個cp程序不斷地產生資料,並送buffer;有m個iop程序從緩衝區中取資料列印

int full = 0        //緩衝區產品數目

int empty = n //緩衝區可存放的產品的空位

int mutex = 1 //對緩衝區互斥訊號燈

main()

producer()

}consumer()

}

有十個讀者和兩個編輯同時處理一篇文章,對於讀操作是可以同時進行的,若有讀者正在讀這篇文章,編輯就不能工作,若編輯正在處理這篇文章,讀者就不能作讀操作,編輯與編輯的工作也是互斥的,試用訊號燈及p、v操作寫出讀者與編輯之間協同工作的程式描述

int mutex = 1;     //讀者與編輯,編輯與編輯的互斥訊號燈

int mutex1 = 1; //對count操作的互斥訊號燈

int count = 0;

reader()

editor()

理髮店裡有一位理髮師、一把理髮椅和n把供顧客等候理髮坐的椅子。如果沒有顧客,則理髮師便在理髮椅上睡覺,當一顧客來到時,他必須先叫醒理髮師,如果理髮師正在理髮時又有顧客來到,則如果有空椅子可坐,他們就坐下來等,如果沒有空椅子,他就離開。用訊號燈和p、v操作寫出理髮師和顧客行為的程式描述。

int chair = n;

int customer = 0;

int barber = 1;

int mutex = 1;

barber()

}customer()

v(mutex);

p(barber);

理髮;}

}

雖然訊號量是一種既方便又有效的程序同步機制,但每個要訪問臨界資源的程序都必須自備同步操作p(s),v(s)。這使大量的同步操作分散在各個程序中。這不僅給系統的管理帶來麻煩,而且還會因同步操作的使用不當而導致系統死鎖。便產生了一種新的程序同步工具 —管程,定義:

將共享資源和與共享資源有關的操作集中在乙個模組中,可單獨編譯。即管程對共享資源進行了封裝,將訊號量及其操作原語封裝在乙個物件內部。程序只能互斥進入管程,在乙個管程中,不能同時有兩個活動的程序

程序的同步和互斥反映了 程序同步和互斥機制

程序同步的幾種機制 多程序的系統中避免不了程序間的相互關係。本講將介紹程序間的兩種主要關係 同步與互斥,然後著重講解解決程序同步的幾種機制。程序互斥是程序之間發生的一種間接性作用,一般是程式不希望的。通常的情況是兩個或兩個以上的程序需要同時訪問某個共享變數。我們一般將發生能夠問共享變數的程式段稱為臨...

程序互斥和同步的筆記

程之間互相競爭某乙個資源,這種關係就稱為程序的互斥,也就是說對於某個系統資源,如果乙個程序正在使用,其他的程序就必須等待其用完,不能同時使用。併發程序使用共享資源時,除了競爭之外有協作,要利用互通訊息的辦法來控制執行速度,使相互協作的程序正確工作。程序之間的相互合作來完成某一任務,把這種關係稱為程序...

程序互斥與同步

1.解釋併發與並行,並說明兩者關係。併發的實質是乙個物理cpu 也可以多個物理cpu 在若干道程式之間多路復用,併發性是對有限物理資源強制行使多使用者共享以提高效率。並行性指兩個或兩個以上事件或活動在同一時刻發生。在多道程式環境下,並行性使多個程式同一時刻可在不同cpu上同時執行。併發與並行是兩個既...