操作系统(二十三)生产者消费者问题
生活随笔
收集整理的這篇文章主要介紹了
操作系统(二十三)生产者消费者问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2.3.6 生產者消費者問題
? 生產者消費者問題(The proceducer-consumer problem)是一個經典的進程同步的問題,問題是這樣描述的:在操作系統中有一組生產者進程一組消費者進程,生產者每次會生產一件產品并放入緩沖區,消費者每次從緩沖區取出一件產品并使用。生產者、消費者共享一個初始為空、大小為n的緩沖區。只有緩沖區沒滿時,生產者才能把產品放入緩沖區,否則必須等待。只有緩沖區不空時,消費者才能從中取出產品,否則必須等待。緩沖區是臨界資源,各進程必須互斥地訪問。??
? 從上面這段話中我們可以總結出一個同步問題以及一個互斥問題:生產者只有生產了產品放入緩沖區之后消費者才能使用(同步問題),同時緩沖區只能由一種進程進行訪問(互斥問題)。對于同步問題可以描述為,檢查緩沖區沒滿之后生產者放入產品;檢查緩沖區不空之后消費者才可以取用產品。下面開始對問題進行描述:
semaphore mutex = 1; //互斥信號量,實現對緩沖區的互斥訪問 semaphore empty = n; //同步信號量,表示空閑緩沖區的數量 semaphore full = 0; //同步信號量,表示產品的數量,也即非空緩沖區的數量producer (){while(1){生產一個產品;P(empty);P(mutex);把產品放入緩沖區;V(mutex);V(full);} }consumer (){while(1){P(full);P(mutex);取走一個產品;V(mutex);V(empty);使用產品;} }? 不知道大家有沒有發現,兩個進程發生聯系的橋梁一定是他們的同步信號量,換句話說,同步信號量的P與V必須出現在兩個不同的進程中。并且實現互斥的P操作一定要在實現同步的P操作之后。V操作不會導致進程阻塞,因此兩個V操作順序可以交換。
總結
以上是生活随笔為你收集整理的操作系统(二十三)生产者消费者问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021电商618生态洞察报告
- 下一篇: java信息管理系统总结_java实现科