‘生產者-消費者’模型與‘讀-寫者’模型

★生產者-消費者模型ide

      首先,咱們先分析一下生產者與消費者模型:生產者與消費者是模型中不可缺乏的2種角色,固然模型中確定須要一個保存數據的場所,可以將生產者生產的數據進行存儲。同時,模型必需要知足生產者產生出數據後,消費者纔可以進行使用,即就是消費者必須位於生產者以後,固然生產者生產的數據最多將場所放置滿就不能繼續生產,下面有簡單的圖示:spa


wKiom1ecXAOQ36APAAAYVAe60OU407.png

     固然,若是有多個消費者和多個生產者,生產者與消費者之間的關係是同步的,生產者與生產者之間是互斥的,由於一塊空間不能讓多個生產者同時進行生產。消費者和消費者之間也是互斥的,也就保證了不能同時進行一塊空間中數據的消費。3d


    生產者是否可以生產取決於還有多少空間,而消費者是否可以消費取決於有多少個數據,生產者開始時有空間,而沒有產生數據,因此生產者確定居於消費者以前。blog


      例:下面是具體的實現生產者-消費者模型,其中使用鏈表來存儲生產的數據,生產的數據頭插入鏈表,消費者的消費數據進行頭刪。ci

wKiom1eca8nRMUAWAACzaVHGuEE503.png

wKioL1ecbMLSw86uAACy-NX6-qg019.png

wKiom1ecbRDDJQDZAAA3dcWYak8603.png

運行結果:資源

wKiom1ecbZbh08biAABGkmdCZQ8584.png


★讀、寫者模型get

      讀、寫者模型與生產者消費者模型相似,可是也要不一樣的地方,多個讀者能夠共享一塊空間中的數據,寫者之間是相互斥的,讀者和寫者之間是互斥的。同步

      讀寫鎖:也稱自旋鎖,一個讀寫鎖容許有多個讀者進行資源的讀取,可是隻可以容許一個寫者對數據進行操做。it


例:io

wKioL1ech-CAZrJfAACs_87paq8872.png

wKioL1eciCWQP___AACjw7pj0Ww209.png

wKiom1eciHXjq8GyAAAextwHW3Q444.png

運行結果:

wKiom1eciXKyYVj5AABJi5ZQoPU896.png

相關文章
相關標籤/搜索