同步與互斥,生產者消費者模型基本概念

2021-08-18 13:13:05 字數 1218 閱讀 2558

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

互斥

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

競爭使用這些資源,程序的這種關係就叫做程序的互斥。

系統中某些資源一次只允許乙個程序使用,稱這種資源叫做臨界資源或者互斥資源

臨界資源:系統中同時存在有許多程序,它們共享各種資源,然而有許多資源在某一時刻只能允許乙個程序使用。例如印表機、磁帶機等硬體裝置和變數、佇列等資料結構,如果有多個程序同時去使用這類資源就會造成混亂。因此必須保護這些資源,避免兩個或多個程序同時訪問這類資源。我們把某段時間內只能允許乙個程序使用的資源稱為臨界資源。

同步:對比前面的互斥概念,還有一種併發關係叫做同步,即程序之間的關係不是相互排斥臨界資源的關係,而是相互依賴的關係。進一步的說明:就是前乙個程序的輸出作為後乙個程序的輸入,當第乙個程序沒有輸出時第二個程序必須等待。簡單來說就是多個程序之間相互協作共同完成一項任務。

臨界區:幾個程序若共享同一臨界資源,它們必須以互相排斥的方式使用這個臨界資源,即當乙個程序正在使用某個臨界資源且尚未使用完畢時,其它程序必須延遲對該資源的操作,當使用該資源的程序釋放該資源時,其它程序才可使用該資源,任何程序不能從中插進去使用這個臨界資源,否則將會造成資訊混亂和操作出錯。我們把訪問臨界資源的**段稱為臨界區。

生產者-消費者問題是乙個經典的程序同步問題,該問題最早由dijkstra提出,用以演示他提出的訊號量機制。在同乙個程序位址空間內執行的兩個執行緒生產者執行緒生產物品,然後將物品放置在乙個空 緩衝區中供消費者執行緒消費。消費者執行緒從緩衝區中獲得物品,然後釋放緩衝區。當生產者執行緒生產物品時,如果沒有空緩衝區可用,那麼生產者執行緒必須等待消費 者執行緒釋放出乙個空緩衝區。當消費者執行緒消費物品時,如果沒有滿的緩衝區,那麼消費者執行緒將被阻塞,直到新的物品被生產出來

執行緒 同步與互斥 消費者 生產者模型

執行緒互斥用互斥鎖,執行緒的同步則用到條件變數。條件變數是用來描述執行緒間同步的。下面以生產者 消費者為例 生產者和消費者之間存在同步與互斥的關係。生產者之間 消費者之間存在互斥的關係 include include includestatic int i 1 pthread mutex t loc...

執行緒的同步與互斥 生產者消費者模型

生產者與消費者模型 生產者與消費者模型是一種描述程序間同步與互斥的乙個方式,在這個模式下有兩類人,乙個是不停產生資料的生產者,乙個是不停獲取資料的消費者,為了效率最高,就必須保持兩者之間的同步與互斥。為了在生產者與消費者使用mutex保持互斥的前提下,posix版本下還有另外乙個函式cond它的作用...

生產者與消費者模型

先介紹幾個函式 生產消費者模型 二者共享資料value,這裡,生產者是producter,消費者是consumer。生產者負責放物品到value中,消費者使用wait 等待生產者的通知。當得到通知後,消費者取出物品,並且用notify 通知生產者,可以再放下一批物品。例項 package cn.ed...