★生產者-消費者模型
首先,我們先分析一下生產者與消費者模型:生產者與消費者是模型中不可缺少的2種角色,當然模型中肯定需要一個保存數據的場所,能夠將生產者生產的數據進行存儲。同時,模型必須要滿足生產者產生出數據後,消費者才能夠進行使用,即就是消費者必須位於生產者之後,當然生產者生產的數據最多將場所放置滿就不能繼續生產,下面有簡單的圖示:
當然,如果有多個消費者和多個生產者,生產者與消費者之間的關係是同步的,生產者與生產者之間是互斥的,因爲一塊空間不能讓多個生產者同時進行生產。消費者和消費者之間也是互斥的,也就保證了不能同時進行一塊空間中數據的消費。
生產者是否能夠生產取決於還有多少空間,而消費者是否能夠消費取決於有多少個數據,生產者開始時有空間,而沒有產生數據,所以生產者肯定居於消費者之前。
例:下面是具體的實現生產者-消費者模型,其中使用鏈表來存儲生產的數據,生產的數據頭插入鏈表,消費者的消費數據進行頭刪。
運行結果:
★讀、寫者模型
讀、寫者模型與生產者消費者模型類似,但是也要不同的地方,多個讀者可以共享一塊空間中的數據,寫者之間是相互斥的,讀者和寫者之間是互斥的。
讀寫鎖:也稱自旋鎖,一個讀寫鎖允許有多個讀者進行資源的讀取,但是隻能夠允許一個寫者對數據進行操作。
例:
運行結果: