實驗四 簡單的PV操作
專業 網絡工程 姓名 方俊暉 學號 201406114309
一、 實驗目的
1.掌握臨界區的概念及臨界區的設計原則;
2.掌握信號量的概念、PV操作的含義以及應用PV操作實現進程的同步與互斥;
3.分析進程爭用資源的現象,學習解決進程互斥的方法。
二、 實驗內容和要求
分析進程的同步與互斥現象,編程實現經典的進程同步問題——生產者消費者問題的模擬
生產者--消費者問題表述:
有一環形緩沖池,包含n個緩沖區(0~n-1)。
有兩類進程:一組生產者進程和一組消費者進程,生產者進程向空的緩沖區中放產品,消費者進程從滿的緩沖區中取走產品。
所有進程必須對緩沖區進行互斥的訪問。
生產者不能向滿緩沖區寫數據,消費者不能從空緩沖區取數據,即生產者與消費者必須同步。
計算機系統中對資源的分配與釋放過程:計算機系統中的每個進程都可以消費或生產某類資源。當系統中某一進程使用某一資源時,可以看作是消耗,且該進程稱為消費者。而當某個進程釋放資源時,則它就相當一個生產者。
定義生產者消費者問題中的各數據結構,並初始化。
信號量,初值。
編寫PV操作。
編寫生產者與消費者程序,利用信號量及其PV操作,實現生產者與消費者之間的同步與互斥。
模擬顯示生產者與消費者同步與互斥的效果。
三、 實驗方法、步驟及結果測試
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define N 50
typedef struct process
{
int i;
}P;
P a[N];
int workingtime=0;
void main(){
int a=0,b;
int flag=1;
int p=0,v=0;
int n,i;
printf("你想要貨架上有多少空間?\n");
scanf("%d",&n);
while(flag==1)
{
srand(time(NULL));
b=rand()%2+1;
if(b==1)
{
if(a<5&&p==0&&v==0)
{
p++;
v++;
a++;
printf("放置商品\n");
p--;
v--;
}
else{
printf("無法放置更多的商品\n");
}
}
else
{
if(a>0&&p==0&&v==0)
{
p++;
v++;
a--;
printf("商品已被消費\n");
p--;
v--;
}
else{
printf("現在貨架上並沒有商品\n");
}
}
printf("繼續請輸1,退出請輸2\n");
scanf("%d",&flag);
}
}
四、 實驗總結
此次實驗除了用c語言實現PV操作的問題上有點困難,只能在顯示效果上模擬,並且成功完成了試驗要求。