作業系統初探 同步中的互斥問題

2021-07-10 23:08:23 字數 1051 閱讀 5294

標籤(空格分隔): 作業系統

系統執行過程中總會存在這樣的問題:兩個不同的程序可能需要「同時」訪問同一資源區域。這叫同步中的互斥問題。(比如火車賣票系統賣出一張票就需要修改票的數目,然而同一時刻可能有多個人同時買了一張票)

這裡為什麼「同時」加引號呢,因為微觀上來看,它再怎麼同時,從發出請求到系統響應之間還是會有乙個先來後到的順序的,假設同時發出了a,b,c三個程序,但是,在執行x-=1這個語句也是需要時間的,看一下這個語句x-=1這個語句按執行順序來看是先調取x的值減1,再把值賦給x,因為a,b,c程序間切換的時間很短暫,所以可能導致了a的x-1完畢後還沒來得及賦值給系統中的那個總的x變數,b和c的x-1就已經完畢了,這就導致了最後系統中的x變數只被減了一次,也就是說a,b,c買了三張票,結果是系統只減少了一張票,這樣會出大問題的。

上述可知,在a執行x-1這個操作時,b,c也都可以執行x-1操作,所以這三個程序共用的是之前那個時刻的共同數值的x,就是由於這個原因導致了最後的把a,b,c的x-1的數值返回給系統的x時返回的都是乙個數值。

那麼解決這個問題的關鍵就是要求系統變數x在某一程序進行完x=x-1操作後才能被繼續訪問呼叫。但程序如何判斷它前面的那個程序到底有沒有進行完呢?

想象一列排隊進外婆家吃飯的人,每個人就是乙個x-=1語句,後來的語句必須在前乙個語句的後面執行。你去外婆家吃飯,你又沒上樓,你怎麼知道樓上有沒有人在吃飯,有幾個人在吃,所以每個程序並不知道自己的前面有沒有語句執行完,所以這個時候外婆家就提供乙個顯示屏,顯示你前面還有幾桌客人排在你前面等待。你看見了那些數字,就知道「噢,我前面還有人在吃飯,那我沒辦法上去吃飯,如果我這個時候上去吃飯,就會和他們爭搶同一桌的飯,就會打起來的」。

抽象起來,這和系統解決這種同步中的互斥問題的思路一致,即設定了一塊「顯示屏」,系統管這個叫「semaphore」(訊號量),程序從四面八方湧進來,哪個程序「上樓」了,「顯示屏」就會隨之發生變化,「樓上的桌子坐滿了」,後來的程序一看「顯示屏」就知道「噢,桌子坐滿了,我得等了」。

所以訊號量只是乙個判別能否進入資源區使用的標準,但有兩點必須保證:

咱們梳理一下同步中的互斥問題的思路:

作業系統 同步與互斥問題

1.生產者 消費者問題 define n 100 有界緩衝區大小 typedef int semaphore 定義訊號量 semaphore mutex 1 臨界區互斥訊號量 semaphore empty n 空閒緩衝區 semaphore full 0 緩衝區初始化為空 void produce...

作業系統實驗 同步互斥

實習1 程序同步 實習要求 在windows 2000 環境下,建立乙個包含n 個執行緒的控制台程序。用這n 個執行緒來表示n 個讀者或寫者。每個執行緒按相應測試資料檔案的要求,進行讀寫操作。請用訊號量機制分別 實現讀者優先和寫者優先的讀者 寫者問題。讀者 寫者問題的讀寫操作限制 1 寫 寫互斥 2...

作業系統程序同步和互斥問題

簡介 程序同步是乙個作業系統級別的概念,是在多道程式的環境下,存在著不同的制約關係,為了協調這種互相制約的關係,實現資源共享和程序協作,從而避免程序之間的衝突,引入了程序同步。臨界資源 在作業系統中,程序是占有資源的最小單位 執行緒可以訪問其所在程序內的所有資源,但執行緒本身並不占有資源或僅僅占有一...