【操作系统-进程】PV操作——吸烟者问题
admin
2024-04-01 06:38:12
0

文章目录

    • 吸烟者问题
    • 解题步骤
      • Step 1. 有几类进程
      • Step 2. 用中文描述动作
      • Step 3. 添加 PV 操作,用中文描述里面的操作
      • Step 4. 检查是否出现死锁
      • Step 5. 定义信号量
    • 网上的代码(与王道的类似)

吸烟者问题

假设一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽掉,但是要卷起并抽掉一支烟,抽烟者需要三种材料:烟草、纸和胶水。三个抽烟者中,第一个拥有烟草,第二个拥有纸,第三个拥有胶水。供应者无限地提供三种材料,供应者每次将两种材料放在桌子上,拥有剩下那种材料的卷烟者卷一根烟并抽掉它,并给供应者一个告诉完成信号,供应者就会放另外两种材料在桌上,这种过程一直重复。

解题步骤

该问题的本质依然是“生产者-消费者”问题,可以用“生产者-消费者”问题的思路去解决。

Step 1. 有几类进程

生产者(){while(1){}
}吸烟者1(烟草){while(1){}
}吸烟者2(纸){while(1){}
}吸烟者3(胶水){while(1){}
}

Step 2. 用中文描述动作

生产者(){while(1){收到从吸烟者3发来的信号;在桌上提供纸和胶水;收到从吸烟者1发来的信号;在桌上提供烟草和胶水;收到从吸烟者2发来的信号;在桌上提供烟草和纸;}
}吸烟者1(烟草){while(1){从桌子上取走纸和胶水;吸烟;向生产者发送一个信号;}
}吸烟者2(纸){while(1){从桌子上取走烟草和胶水;吸烟;向生产者发送一个信号;}
}吸烟者3(胶水){while(1){从桌子上取走烟草和纸;吸烟;向生产者发送一个信号;}
}

Step 3. 添加 PV 操作,用中文描述里面的操作

【注】//表示新加入的代码。

(1)生产者

生产者(){while(1){P(从吸烟者3发来的信号); //在桌上提供纸和胶水;P(从吸烟者1发来的信号); //在桌上提供烟草和胶水;P(从吸烟者2发来的信号); //在桌上提供烟草和纸;}
}吸烟者1(烟草){while(1){从桌子上取走纸和胶水;吸烟;V(吸烟者1向生产者发送信号); //}
}吸烟者2(纸){while(1){从桌子上取走烟草和胶水;吸烟;V(吸烟者2向生产者发送信号); //}
}吸烟者3(胶水){while(1){从桌子上取走烟草和纸;吸烟;V(吸烟者3向生产者发送信号); //}
}

(2)吸烟者 1

生产者(){while(1){P(从吸烟者3发来的信号);在桌上提供纸和胶水;V(桌子上有纸和胶水); //P(从吸烟者1发来的信号);在桌上提供烟草和胶水;P(从吸烟者2发来的信号);在桌上提供烟草和纸;}
}吸烟者1(烟草){while(1){P(桌子上有纸和胶水吗?有-1,没有阻塞); //从桌子上取走纸和胶水;吸烟;V(吸烟者1向生产者发送信号);}
}吸烟者2(纸){while(1){从桌子上取走烟草和胶水;吸烟;V(吸烟者2向生产者发送信号);}
}吸烟者3(胶水){while(1){从桌子上取走烟草和纸;吸烟;V(吸烟者3向生产者发送信号);}
}

(3)吸烟者 2、吸烟者 3

跟上面是类似的:

生产者(){while(1){P(从吸烟者3发来的信号);在桌上提供纸和胶水;V(桌子上有纸和胶水+1); //P(从吸烟者1发来的信号);在桌上提供烟草和胶水;V(桌子上有烟草和胶水+1); //P(从吸烟者2发来的信号);在桌上提供烟草和纸;V(桌子上有烟草和纸+1); //}
}吸烟者1(烟草){while(1){P(桌子上有纸和胶水吗?有-1,没有阻塞); //从桌子上取走纸和胶水;吸烟;V(吸烟者1向生产者发送信号);}
}吸烟者2(纸){while(1){P(桌子上有烟草和胶水吗?有-1,没有阻塞); //从桌子上取走烟草和胶水;吸烟;V(吸烟者2向生产者发送信号);}
}吸烟者3(胶水){while(1){P(桌子上有烟草和纸吗?有-1,没有阻塞); //从桌子上取走烟草和纸;吸烟;V(吸烟者3向生产者发送信号);}
}

(4)缓冲区

每次桌子上只放一件组合,不需要互斥锁。

Step 4. 检查是否出现死锁

不会发生死锁。

Step 5. 定义信号量

offer信号量均表示产品(材料组合)的数量,初始值设为 0。

finish信号量均为前驱后继的关系,因此初始值设为 0。

信号量 offer1 = 0;
信号量 offer2 = 0;
信号量 offer3 = 0;
信号量 finish1 = 0;
信号量 finish2 = 0;
信号量 finish3 = 0;生产者(){while(1){P(finish3);在桌上提供纸和胶水;V(offer1);P(finish1);在桌上提供烟草和胶水;V(offer2);P(finish2);在桌上提供烟草和纸;V(offer3);}
}吸烟者1(烟草){while(1){P(offer1);从桌子上取走纸和胶水;吸烟;V(finish1);}
}吸烟者2(纸){while(1){P(offer2);从桌子上取走烟草和胶水;吸烟;V(finish2);}
}吸烟者3(胶水){while(1){P(offer3);从桌子上取走烟草和纸;吸烟;V(finish3);}
}

网上的代码(与王道的类似)

网上的代码是随机放材料,我写的代码是按顺序依次放材料。

  1. 关系分析。供应者与三个抽烟者分别是同步关系。由于供应者无法同时满足两个或 以上的抽烟者,三个抽烟者对抽烟这个动作互斥。

  2. 整理思路。这里有四个进程。供应者作为生产者向三个抽烟者提供材料。

  3. 信号量设置。信号量 offer1、offer2、offer3 分别表示烟草和纸组合的资源、烟草和 胶水组合的资源、纸和胶水组合的资源。信号量 finish 用于互斥进行抽烟动作。

int random; //存储随机数
semaphore offer1 = 0; //定义信号量对应烟草和纸组合的资源
semaphore offer2 = 0; //定义信号量对应烟草和胶水组合的资源
semaphore offer3 = 0; //定义信号量对应纸和胶水组合的资源
semaphore finish = 0; //定义信号量表示抽烟是否完成//供应者
while(1){random = 任意一个整数随机数;random = random % 3;if (random == 0)V(offerl) ; //提供烟草和纸else if (random == 1) V(offer2);  //提供烟草和胶水elseV(offer3)  //提供纸和胶水// 任意两种材料放在桌子上,并等待抽烟者抽烟后将 finish 设置为 1P(finish);//抽烟者已经使用完材料,需要继续提供材料
}//拥有烟草者
while(1){P (offer3);// 拿纸和胶水,卷成烟,抽掉;V(finish);
}//拥有纸者
while(1){P(offer2);// 烟草和胶水,卷成烟,抽掉;V(finish);
}//拥有胶水者
while(1){P(offer1);// 拿烟草和纸,卷成烟,抽掉;v(finish);
}

相关内容

热门资讯

上节育环后需要注意什么 一、休息与活动 上节育环后要适当休息,避免剧烈运动和重体力劳动,一般建议休息1 - 2天。因为过早进...
挖矿收益不足3美分!比特币暴跌... 来源:环球市场播报 TMG Core 展台的液体浸没式冷却矿槽中的加密货币矿机。 罗森布拉特证券公...
众机构唱多三星电子:存储巨头冲... 财联社2月25日讯(编辑 史正丞)随着三星电子周二收涨3.6%,迈上每股20万韩元的历史新高,分析师...
增值税发票数据显示:春节假期消... 新华社北京2月24日电(记者刘开雄)记者2月24日从国家税务总局获悉,增值税发票数据显示,2026年...
从“向外求索”到“向内安顿”的... 从“向外求索”到“向内安顿”的消费觉醒 当商务宴席上的茅台与书房中静静摆放的谦夫子养生露酒同时出现在...
千寻智能完成近20亿元融资 北京商报讯(记者 陶凤 王天逸)2月24日,具身智能头部企业千寻智能宣布,近日连续完成两轮融资,金额...
原创 银... 最近不少人发现,家附近的银行网点悄悄关门了,有的贴出公告终止营业,有的直接撤柜清空,就连工商银行、建...
美联储理事库克称央行可能无法应... 来源:环球市场播报 美联储理事丽莎·库克警告称,美国央行可能无法应对因采用人工智能而导致的失业率上升...
焦点访谈|这个春节假期,消费市... 来源:滚动播报 (来源:千龙网) 金马昂首,新春纳福。刚刚过去的丙午年春节假期,消费市场购销两旺持续...
亚朵节后价格“跳水”超70% 春节过后,部分热门小城的亚朵酒店房价上演“过山车”行情,房价节前飙升,节后迅速跳水,巨大的价格波动引...
原创 金... 你绝对想不到,同样一克999足金,在深圳水贝批发市场只要1334元,走进周大福门店却变成1545元,...
德兰明海冲击港交所!递表前大手... 又一家储能企业“叩响”了港交所大门。近期,港交所官网显示,中小型用户侧储能企业深圳市德兰明海新能源股...
绿茶集团、猫眼娱乐发布正面盈利... |2026年2月25日 星期三| NO.1绿茶集团发布正面盈利预告 2月24日港股收市后,绿茶集团(...
安宁市的历史文化及名人有哪些 安宁市,这座坐落在彩云之南的城市,宛如一颗璀璨明珠,散发着迷人的历史文化魅力。在这里,岁月留下了深深...
中国央行连续12个月加量续作M... 来源:中国新闻网 中新社北京2月24日电 (陶思阅)中国央行24日发布中期借贷便利(MLF)招标公告...
不是15%?特朗普10%全球关... 据美国海关及边境保卫局(CBP)发布消息,特朗普政府将实施的新全球关税为10%。 第一财经收到的CB...
2026年春节出游人次、消费金... 2026年春节,为期9天的超长假期点燃了全国消费热情,多项核心数据创下历史纪录。 经文化和旅游部数据...
美国联邦存款保险公司(FDIC... 美国联邦存款保险公司(FDIC):美国银行业存款季环比下滑2%。
2026春节AI大战深度复盘:... 主编温静导读:2026年春节,元宝、千问、豆包三大巨头以红包、免单为杠杆,发动了一场规模空前的用户争...