實驗四 簡單的PV操作


實驗四 簡單的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操作的問題上有點困難,只能在顯示效果上模擬,並且成功完成了試驗要求。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM