問題: 模擬生產者-消費者問題
要求:設定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操作分析問題,畫出前驅圖,把每一對前驅關係都看成乙個...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...