zoukankan      html  css  js  c++  java
  • 实验四

    实验四  用信号量解决进程互斥与同步问题

    生产者与消费者问题模拟

    一、实验目的

    1. 掌握临界区的概念及临界区的设计原则;
    2. 掌握信号量的概念、PV操作的含义以及应用PV操作实现进程的同步与互斥;
    3. 分析进程争用资源的现象,学习解决进程互斥的方法。

    二、实验内容

    分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者消费者问题的模拟。

    三、实验步骤

    生产者--消费者问题表述:

    有一环形缓冲池,包含n个缓冲区(0~n-1)。

    有两类进程:一组生产者进程和一组消费者进程,生产者进程向空的缓冲区中放产品,消费者进程从满的缓冲区中取走产品。

    所有进程必须对缓冲区进行互斥的访问。

    生产者不能向满缓冲区写数据,消费者不能从空缓冲区取数据,即生产者与消费者必须同步。

    计算机系统中对资源的分配与释放过程:计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产者。

    1. 定义生产者消费者问题中的各数据结构,并初始化。

    信号量,初值。

         2.编写PV操作。

        3.编写生产者与消费者程序,利用信号量及其PV操作,实现生产者与消费者之间的同步与互斥。

        4.模拟显示生产者与消费者同步与互斥的效果。

        5.选做:模拟显示读者写者问题的效果。

    四:程序代码

    #include<stdio.h>

    #include<stdlib.h>

    #include<math.h>

    #include<time.h>

    #define N 100

    typedef struct process

    {

           int num;

    }P;

    P a[N];

    int wordtime=0;

    void main(){

    int i=0,j,run=1,n,p=0,v=0,num;

    printf("输入存放量的大小 ");

    scanf("%d",&n);

    while(run==1)

    {

    srand(time(NULL));

    j=rand()%2+1;

    if(1==j)

    {

           if(i<5&&p==0&&v==0)

           {

                  p++;

                  v++;

                  i++;

           printf("生产 ");

           p--;

                  v--;

           }

    else{

    printf("仓库已满无法生产 ");

    }     

          

    }

    else

    {

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

    {

                  p++;

                  v++;

           i--;

           printf("消费 ");

                  p--;

                  v--;

    }

    else{

    printf("无货物无法消费 ");

    }     

    }

    printf("是否继续||1.是 2.否 ");

    scanf("%d",&run);

    }

    }

    五:程序结果

  • 相关阅读:
    thinkphp5.0与thinkphp3.2之间的区别
    比较数组大小
    PHP语言开发微信公众平台(订阅号)之curl命令(补充)
    ThinkPHP3.2.3快速入门:基础篇
    phpcms利用表单向导创建留言板(可以回复)
    Vijos P1782 借教室 ( 前缀和&&差分序列)
    HDU2648:Shopping(DKBR_hash)
    Codeforces Round #375 (Div. 2)
    BestCoder Round #88
    Codeforces Round #373 (Div. 2)
  • 原文地址:https://www.cnblogs.com/liulingyuan/p/5597894.html
Copyright © 2011-2022 走看看