日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

操作系统(二十五)吸烟者问题-单生产者多消费者问题

發布時間:2025/3/15 windows 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统(二十五)吸烟者问题-单生产者多消费者问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2.3.8 吸煙者問題-單生產者多消費者問題

??假設一個系統有三個抽煙者進程和一個供應者進程。每個抽煙者不停地卷煙并抽掉它,但是要卷起并抽掉一支煙,抽煙者需要有三種材料:煙草、紙和膠水。三個抽煙者中,第一個擁有煙草、第二個擁有紙、第三個擁有膠水。供應者進程無限地?供三種材料,供應者每次將兩種材料放桌子上,擁有剩下那種材料的抽煙者卷一根煙并抽掉它,并給供應者進程一個信號告訴完成了,供應者就會放另外兩種材料再桌上,這個過程一直重復(讓三個抽煙者輪流地抽煙)。

? 這也是一個生產者-消費者問題,準確的說是一個可生產多種產品的單生產者以及多消費者問題。根據題意分析可得,生產者可生產的產品一共有三種:組合一:紙+膠水;組合二:煙草+膠水;組合三:煙草+紙。下面我們來分析一下本題目中包含的同步與互斥的關系:互斥關系:桌子可以看作是一個容量為1的緩沖區,其訪問是互斥的;同步關系:桌上有組合一之后第一個抽煙者取走組合一;桌上有組合二之后第二個抽煙者取走組合二;桌上有組合三之后第三個抽煙者取走組合三;取走東西使用完成后供應者將下一個組合放到桌子上。用前驅圖表示如下:

? 具體實現如下:

semaphore offer1 = 0; //桌上組合一的數量 semaphore offer2 = 0; //桌上組合二的數量 semaphore offer3 = 0; //桌上組合三的數量 semaphore finish = 0; //抽煙是否完成 semaphore mutex = 1; //實現互斥訪問桌子(實際上可以不用) int i = 0; //用于實現“三個抽煙者輪流抽煙”provider (){while(1){if(i==0) {P(mutex);將組合一放桌上;V(mutex);V(offer1);} else if(i==1){P(mutex);將組合二放桌上;V(mutex);V(offer2);} else if(i==2){P(mutex);將組合三放桌上;V(mutex);V(offer3);}i = (i+1)%3;P(finish);} }smoker1 (){while(1){P(offer1);從桌上拿走組合一;卷煙;抽掉;V(finish);} }smoker2 (){while(1){P(offer2);從桌上拿走組合二;卷煙;抽掉;V(finish);} }smoker3 (){while(1){P(offer3);從桌上拿走組合三;卷煙;抽掉;V(finish);} }

?

總結

以上是生活随笔為你收集整理的操作系统(二十五)吸烟者问题-单生产者多消费者问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。