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