8.5 經(jīng)典進(jìn)程同步問題-吸煙者問題

問題描述

假設(shè)一個(gè)系統(tǒng)有三個(gè)抽煙者進(jìn)程和一個(gè)供應(yīng)者進(jìn)程。每個(gè)抽煙者需要有三種材料:煙草、紙和膠水,才可吸煙。三個(gè)抽煙者分別擁有三種材料中的一種。 供應(yīng)者每次隨機(jī)將兩種材料放到桌子上,擁有剩下那種材料的抽煙者卷一根煙并抽掉它。材料被使用后,供應(yīng)者按上述原則繼續(xù)提供材料。

問題分析

  1. 關(guān)系分析。供應(yīng)者與三個(gè)抽煙者分別是同步關(guān)系。由于供應(yīng)者無法同時(shí)滿足兩個(gè)或 以上的抽煙者,三個(gè)抽煙者對(duì)抽煙這個(gè)動(dòng)作互斥。

  2. 整理思路。這里有四個(gè)進(jìn)程。供應(yīng)者作為生產(chǎn)者向三個(gè)抽煙者提供材料。

  3. 信號(hào)量設(shè)置。信號(hào)量offer1、offer2、offer3分別表示煙草和紙組合的資源、煙草和 膠水組合的資源、紙和膠水組合的資源。信號(hào)量finish用于互斥進(jìn)行抽煙動(dòng)作。

解決方案

注意:finish初始值為0,表示無人抽煙,當(dāng)供應(yīng)者材料抽煙后,材料使用完畢,會(huì)調(diào)用V(finish),將finish加1。供應(yīng)者接到此通知后,繼續(xù)隨機(jī)提供材料。代碼如下:

int random; //存儲(chǔ)隨機(jī)數(shù)
semaphore offer1=0; //定義信號(hào)量對(duì)應(yīng)煙草和紙組合的資源
semaphore offer2=0; //定義信號(hào)量對(duì)應(yīng)煙草和膠水組合的資源
semaphore offer3=0; //定義信號(hào)量對(duì)應(yīng)紙和膠水組合的資源
semaphore finish=0; //定義信號(hào)量表示抽煙是否完成

//供應(yīng)者
while(1){
    random = 任意一個(gè)整數(shù)隨機(jī)數(shù);
    random=random% 3;
    if(random==0)
        V(offerl) ; //提供煙草和紙
    else if(random==l) 
        V(offer2);  //提供煙草和膠水
    else
        V(offer3)  //提供紙和膠水
    // 任意兩種材料放在桌子上,并等待抽煙者抽煙后將finish設(shè)置為1
    P(finish);//抽煙者已經(jīng)使用完材料,需要繼續(xù)提供材料
}

//擁有煙草者
while(1){
    P (offer3);
    // 拿紙和膠水,卷成煙,抽掉;
    V(finish);
}

//擁有紙者
while(1){
    P(offer2);
    // 煙草和膠水,卷成煙,抽掉;
    V(finish);
}

//擁有膠水者
while(1){
    P(offer1);
    // 拿煙草和紙,卷成煙,抽掉;
    v(finish);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問題描述 有讀者和寫者兩組并發(fā)進(jìn)程,共享一個(gè)文件,當(dāng)兩個(gè)或以上的讀進(jìn)程同時(shí)訪問共享數(shù)據(jù)時(shí)不會(huì)產(chǎn)生副作用,但若某個(gè)寫...
    saviochen閱讀 2,369評(píng)論 0 6
  • 又來到了一個(gè)老生常談的問題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問題開始,來談?wù)劜?..
    tangsl閱讀 4,317評(píng)論 0 23
  • 本文摘自湯小丹主編《計(jì)算機(jī)操作系統(tǒng)》(第三版)2.4 經(jīng)典進(jìn)程的同步問 在多道程序環(huán)境下,進(jìn)程同步問題十分重要,也...
    劉帥_閱讀 4,783評(píng)論 1 1
  • 我在哪 我還在原地 回頭看一眼 迷迭香在風(fēng)中搖曳 你在哪 你正在遠(yuǎn)方 背著一囊星光 看月色引領(lǐng)著前方 他在哪 你我...
    雙雨閱讀 215評(píng)論 0 2
  • 那天,丈夫說想吃蘑菇 我便購了些來 孩子在屋外玩耍 小狗在快樂的奔跑 天空很晴朗 我認(rèn)真的整理蘑菇 一朵又一朵 我...
    老慕慕閱讀 297評(píng)論 0 1

友情鏈接更多精彩內(nèi)容