程式02 作業系統生產者 消費者問題

2021-08-19 19:39:29 字數 1267 閱讀 8511

問題: 模擬生產者-消費者問題

要求:設定1個消費者,1個生產者,共享乙個空間為5的迴圈緩衝區,採用p,v操作

輸出:任意多次輸入p或c,表示執行生產或消費,每次輸出

1.當前的緩衝區狀態(空的格仔用0,有物品的格仔為1表示);

2.相應訊號量的值;

3.若輸入違反原則,則輸出相應提示「緩衝區已滿」或「緩衝區已空」;

思路:1

、生產者投放乙個產品,輸入指標in+1:

in=(in+1)%n;

其中,in初始值為0,n代表緩衝區個數

2、消費者每消費乙個產品,輸出指標out+1

out=(out+1)%n

out初值為0,n代表緩衝區個數;

3、引入乙個公共訊號量count,初值為0;

生產者每生產乙個產品時,count++,count=n時不能再投放產品

消費者每取出乙個產品時,count--,count=0時不能再取出產品

**:

// 生產者-消費者問題.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include#pragma warning(disable:4996)

int in=0,out=0;//輸入輸出指標

int count = 0;//訊號量

int full = 1, empty = 0;//快取區狀態

int buffer[5];//迴圈緩衝區

int n = 5;

bool producer();

bool consumer();

void print();

int main()

} else if (c=='c')

}else

printf("\n請輸入操作p/c(p為生產,c為消費):");

getchar();

} return 0;

}//生產者

bool producer()

else }

//輸出

void print()

else

}printf("\n當前訊號量值:%d\n", count);

}

執行結果:

作業系統 生產者消費者題變形

目錄 題目描述 互斥 同步 變形 同步家裡有乙個盤子 爸爸給盤子裡面放蘋果,女兒吃蘋果 媽媽給盤子裡面放桔子,兒子吃桔子 爸爸媽媽兒子女兒互斥盤子 設互斥訊號量mx初 1 1盤子中沒有蘋果時 當且僅當爸爸放蘋果 女兒取蘋果 2盤子滿時 當且僅當女兒或者兒子取爸爸媽媽都可以用 empty初 0 3盤子...

作業系統,生產者 消費者問題詳解

生產者 消費者問題 分析問題,確定臨界區 設定互斥訊號量,初值為1 臨界區之前對訊號量執行p操作臨界區之後對訊號量執行v操作分析問題,找出 需要實現 一前一後 的同步關係 設定同步訊號量,初始值為0 在 前操作 之後執行v操作在 後操作 之前執行p操作分析問題,畫出前驅圖,把每一對前驅關係都看成乙個...

生產者消費者 生產者與消費者模式

一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...