雖然多個程序可以共享系統中的各種資源,但其中許多資源一次只能為乙個程序所使用,我們把一次僅允許乙個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源,如印表機等。此外,還有許多變數、資料等都可以被若干程序共享,也屬於臨界資源。
對臨界資源的訪問,必須互斥地進行,在每個程序中,訪問臨界資源的那段**稱為臨界區。為了保證臨界資源的正確使用,可以把臨界資源的訪問過程分成四個部分:
- 進入區。為了進入臨界區使用臨界資源,在進入區要檢查可否進入臨界區,如果可以進入臨界區,則應設定正在訪問臨界區的標誌,以阻止其他程序同時進入臨界區。
- 臨界區。程序中訪問臨界資源的那段**,又稱臨界段。
- 退出區。將正在訪問臨界區的標誌清除。
- 剩餘區。**中的其餘部分。
do while(true)同步亦稱直接制約關係,它是指為完成某種任務而建立的兩個或多個程序,這些程序因為需要在某些位置上協調它們的工作次序而等待、傳遞資訊所產生的制約關係。程序間的直接制約關係就是源於它們之間的相互合作。
例如,輸入程序a通過單緩衝向程序b提供資料。當該緩衝區空時,程序b不能獲得所需資料而阻塞,一旦程序a將資料送入緩衝區,程序b被喚醒。反之,當緩衝區滿時,程序a被阻塞,僅當程序b取走緩衝資料時,才喚醒程序a。
互斥亦稱間接制約關係。當乙個程序進入臨界區使用臨界資源時,另乙個程序必須等待, 當占用臨界資源的程序退出臨界區後,另一程序才允許去訪問此臨界資源。
例如,在僅有一台印表機的系統中,有兩個程序a和程序b,如果程序a需要列印時, 系統已將印表機分配給程序b,則程序a必須阻塞。一旦程序b將印表機釋放,系統便將程序a喚醒,並將其由阻塞狀態變為就緒狀態。
為禁止兩個程序同時進入臨界區,同步機制應遵循以下準則:
空閒讓進。臨界區空閒時,可以允許乙個請求進入臨界區的程序立即進入臨界區。
忙則等待。當已有程序進入臨界區時,其他試圖進入臨界區的程序必須等待。
有限等待。對請求訪問的程序,應保證能在有限時間內進入臨界區。
讓權等待。當程序不能進入臨界區時,應立即釋放處理器,防止程序忙等待。
摘自:程序(執行緒)之間的兩種關係:同步與互斥。
所謂互斥,是指散布在不同程序之間的若干程式片斷,當某個程序執行其中乙個程式片段時,其它程序就不能執行它們之中的任一程式片段,只能等到該程序執行完這個程式片段後才可以執行。
所謂同步,是指散步在不同程序之間的若干程式片斷,它們的執行必須嚴格按照規定的 某種先後次序來執行,這種先後次序依賴於要完成的特定的任務。
顯然,同步是一種更為複雜的互斥,而互斥是一種特殊的同步。也就是說互斥是兩個執行緒之間不可以同時執行,他們會相互排斥,必須等待乙個執行緒執行完畢,另乙個才能執行,而同步也是不能同時執行,但他是必須要安照某種次序來執行相應的執行緒(也是一種互斥)!
所以:
互斥:是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。
同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。
程序間
互斥,還沒有找到對應的介面函式
同步,使用system v訊號量,semctl、semget、semop等
執行緒間
互斥,使用pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock、pthread_mutex_destroy等
同步,使用posix訊號量,sem_init、sem_wait、sem_post,sem_destory
核心層似乎用mutex所多一些,sem的很少
核心同步用completion, spin_lock, 原子操作等
同步與互斥
在多道程式系統中,由於程序併發,資源共享與程序協作,使得程序間可能產生兩種形式的制約 1 間接相互制約 源於資源共享,如果程序ab共享一種資源,如果a請求資源時發現程序b正在訪問這種資源,那麼程序a就進入阻塞佇列,當程序b釋放資源,程序a被喚醒到就緒狀態 2 直接相互制約 源於程序協作,如果程序a通...
同步與互斥
同步與互斥的概念 當執行緒併發執行時,由於資源共享和執行緒協作,使用執行緒之間會存在以下兩種制約關係。1.間接相互制約。乙個系統中的多個執行緒必然要共享某種系統資源,如共享cpu,共享i o裝置,所謂間接相互制約即源於這種資源共享,印表機就是最好的例子,執行緒a在使用印表機時,其它執行緒都要等待。間...
同步與互斥
現代作業系統基本都是多工作業系統,即同時有大量可排程實體在執行。在多工作業系統中,同時執行的多個任務可能 這兩種情形是多工程式設計中遇到的最基本的問題,也是多工程式設計中的核心問題,同步和互斥就是用於解決這兩個問題的。互斥 是指散步在不同任務之間的若干程式片斷,當某個任務執行其中乙個程式片段時,其它...