Linux 同步與互斥原理,了解生產者與消費者關係

2021-08-19 09:22:45 字數 1429 閱讀 8723

各程序採取互斥的方式,實現共享的資源稱作臨界資源。

屬於臨界資源的硬體有印表機、磁帶機等,軟體有訊息緩衝佇列、變數、陣列、緩衝區等。 諸程序間應採取互斥方式,實現對這種資源的共享。

每個程序中訪問臨界資源的那段**稱為臨界區。顯然,若能保證諸程序互斥地進入自己的臨界區,便可實現諸程序對臨界資源的互斥訪問。為此,每個程序在進入臨界區之前,應先對欲訪問的臨界資源進行檢查,看它是否正被訪問。如果此刻該臨界資源未被訪問,程序便可進入臨界區對該資源進行訪問,並設定它正被訪問的標誌;如果此刻該臨界資源正被某程序訪問,則本程序不能進入臨界區。

在作業系統中,有臨界區的概念。臨界區內放的一般是被1個以上的程序或執行緒(以下只說程序)共用的資料。

臨界區內的資料一次只能同時被乙個程序使用,當乙個程序使用臨界區內的資料時,其他需要使用臨界區資料的程序進入等待狀態。

作業系統需要合理的分配臨界區以達到多程序的同步和互斥關係,如果協調不好,就容易使系統處於不安全狀態,甚至出現死鎖現象。

由於各程序要求共享資源,而且有些資源需要互斥使用,因此各程序間競爭使用這些資源,程序的

這種關係為程序的互斥。

系統中某些資源一次只允許乙個程序使用,稱這樣的資源為臨界資源或互斥資源。

在程序中涉及到互斥資源的程式段叫臨界區。

是指多個程序需要相互配合共同完成一項任務。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源,如「第一類讀寫者模型」。同步是一種時序關係,如規定了程序1處理完事情a後,程序2才能處理事情b。

如果a和b互相包含,那a只能等於b,而同步和互斥的是不對等的。但從廣義上來看,互斥是一種特殊的同步,同步是一種更為複雜的互斥關係。

有兩個程序分別為消費者程序和生產者程序,對同乙個臨界資源進行訪問,生產者不斷的將生產的產品加入緩衝區,而消費者不斷的消費緩衝區中的資源,利用訊號量實現兩個程序的同步與互斥。

在生產者往緩衝區加入產品時,需要兩個訊號量,乙個是互斥訊號量,使得在生產者往快取裡放產品的時候其他程序不能對臨界資源進行操作,另乙個訊號量是指示快取區是否已滿的訊號量,從而判斷生產者能否往緩衝區加入產品;而消費者從緩衝區中消費資源的時候,也需要兩個訊號量,乙個訊號量是互斥訊號量,使得消費者在從緩衝區中取產品的時候其他程序不能對臨界資源進行操作,另外乙個訊號量是指示緩衝區是否為空,從而判斷消費者能否對緩衝區進行操作。

由以上分析,可知在該問題中共需要三個訊號量,乙個是用於互斥的訊號量mutux=1; 乙個是用於指示緩衝區空位置數目的empty=n;另外乙個是指示緩衝區填滿位置的訊號量full = 0;

用於同步的訊號量一定是位於不同程序中,用於互斥的訊號量一定是位於同乙個程序中。

那假如前乙個人一次只使用兩分鐘,或更短時間,每次結束後,第二個人剛準備去使用電腦,前乙個人又重新坐下,反覆這個動作,第二個人就無法使用,但是在互斥機制上也完全符合規則。同步機制就在於解決將這種情況,只要前乙個人起身,不使用電腦了,那麼就只能重新排隊,換下乙個人使用。

調研同步與互斥概念原理,了解生產者消費者原理

現代作業系統提供了乙個併發控制環境,即系統中同時活動著多個不同的程序,這些程序共享同乙個cpu,記憶體或i o裝置。特別是對於linux作業系統來說,其多工,多使用者,分時實時混合的性質決定了多個程序在某種程度上彼此依賴或相互制約的關係,這些關係我們叫 併發關係 按其性質可以分為同步和互斥兩類。程序...

Linux 互斥與同步

使用互斥鎖之前必須要建立乙個鎖的物件。互斥鎖的型別為pthread mutex t,建立乙個變數就是建立了乙個互斥鎖,我們通過這個變數建立開鎖和解鎖的聯絡。但這個鎖還不能夠直接使用,需要對其進行初始化。我們對建立好的鎖進行初始化的方法有兩種 第二個引數attr 如果傳入null,互斥鎖的屬性設定為預...

Linux 執行緒同步與互斥

多個執行緒併發的操作共享變數,會帶來 些問題。假設兩個執行緒讀寫相同變數時,執行緒a讀取變數然後給這個變數賦予乙個新的值,但寫操作需要兩個儲存週期。當執行緒b在這兩個寫週期讀取這個變數時,可能會得到不一致的值。為了避免這個問題,就需要互斥,同一時間只允許乙個執行緒訪問該變數。假設乙個場景,現有100...