zoukankan      html  css  js  c++  java
  • 实验四 简单的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("你想要货架上有多少空间? ");

    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("放置商品 ");

       p--;

          v--;

       }

    else{

    printf("无法放置更多的商品 ");

    }  

      

    }

    else

    {

    if(a>0&&p==0&&v==0)

    {

          p++;

          v++;

       a--;

       printf("商品已被消费 ");

          p--;

          v--;

    }

    else{

    printf("现在货架上并没有商品 ");

    }  

     

    }

    printf("继续请输1,退出请输2 ");

    scanf("%d",&flag);

     

    }

    }

     

    四、 实验总结

    此次实验除了用c语言实现PV操作的问题上有点困难,只能在显示效果上模拟,并且成功完成了试验要求。

  • 相关阅读:
    03:信号与槽,以字体修改为例
    赞不绝口点赞器原作者的撤项信
    钉钉魔铃 铃声切换器 1.0 项目失败
    KC开发组官方网站
    搜索引擎知识
    现在的手机厂家真浮躁
    02:QT的第一个程序
    第一次做编程语言的英语阅读理解
    mysql 报错[Err] [Dtf] 1292
    Mysql 精确查询是否字段中包含某个字符串
  • 原文地址:https://www.cnblogs.com/amzinghui/p/5607219.html
Copyright © 2011-2022 走看看