实验四 简单的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操作的问题上有点困难,只能在显示效果上模拟,并且成功完成了试验要求。
实验四 简单的PV操作的更多相关文章
- Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步
Java入门到精通——基础篇之多线程实现简单的PV操作的进程同步 一.概述 PV操作是对信号量进行的操作. 进程同步是指在并发进程之间存在一种制约关系,一个进程的执行依赖另一个进程的消 ...
- Pintos修改优先级捐赠、嵌套捐赠、锁的获得与释放、信号量及PV操作
Pintos修改优先级捐赠.嵌套捐赠.锁的获得与释放.信号量及PV操作 原有的优先级更改的情况下面没有考虑到捐赠的情况,仅仅只是改变更改了当前线程的优先级,更别说恢复原本优先级了,所以不能通过任何有关 ...
- 转 PV操作简单理解
传送门 PV操作简单理解 进程通常分为就绪.运行和阻塞三个工作状态.三种状态在某些条件下可以转换,三者之间的转换关系如下: 进程三个状态之间的转换就是靠PV操作来控制的.PV操作主要就是P操作.V操作 ...
- [转载]PV操作简单理解
原文链接:http://blog.csdn.net/liushuijinger/article/details/7586656 进程通常分为就绪.运行和阻塞三个工作状态.三种状态在某些条件下可以转 ...
- 操作系统实验——PV操作实现生产者消费者模型
操作系统PV操作之--生产者消费者模型 个人博客主页 参考资料: Java实现PV操作 | 生产者与消费者 浙大公开课 在操作系统的多进程.多线程操作中经常会有因为同步.互斥等等问题引发出的一系列问题 ...
- 20145216 20145330 《信息安全系统设计基础》 实验五 简单嵌入式WEB 服务器实验
20145216 20145330 <信息安全系统设计基础> 实验五 简单嵌入式WEB 服务器实验 实验报告封面 实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/ ...
- Java实验四和实验五
实验四 类的继承性和多态性 [开发语言及实现平台或实验环境] Windows2000 或XP,JDK1.6与Jcreator4.0 [实验目的] 1. 掌握OOP方式进行程序设计的方法, 2. 了 ...
- 20145337实验四Android开发基础
20145337实验四Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事件处 ...
- 8天掌握EF的Code First开发系列之2 简单的CRUD操作
本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 创建控制台项目 根据.Net中的类来创建数据库 简单的CRUD操作 数据库模式更改介绍 本章小结 本人的实验环境 ...
随机推荐
- JavaScript继承
最佳的继承范式 寄生组合继承 我们来看一下它的实现方式: function Object(o){ var TempObject = function(){}; TempObject.prototype ...
- 29.Hadoop之HDFS集群搭建笔记
0.修改IP,主机名,hosts文件 setup 修改网卡IP service network restart 重启网络服务使IP生效 ...
- 剑指offer六:反转链表
输入一个链表,反转链表后,输出链表的所有元素 public class ListNode { int val; ListNode next = null; ListNode(int val) { th ...
- select元素中设置padding效果
更新2016-9-17:这个bug是在mac os上的发生,在window系统中不存在这个问题! 给select元素增加:padding-left:20px;但是未生效,如下图所示: 在select上 ...
- (原创)Windows系统后安装ubuntu,无法选择启动ubuntu。
继Window系统之后,安装Ubuntu系统. 问题:启动没有Grub的ubuntu启动项. 查看:/boot/grub/中只有txt和env,内容空白,grub没有设置好. 修复: sudo fdi ...
- Java学习--内部类(一)
Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...
- Deep Learning 19_深度学习UFLDL教程:Convolutional Neural Network_Exercise(斯坦福大学深度学习教程)
理论知识:Optimization: Stochastic Gradient Descent和Convolutional Neural Network CNN卷积神经网络推导和实现.Deep lear ...
- JQuery_元素属性操作
除了对元素内容进行设置和获取,通过jQuery 也可以对元素本身的属性进行操作,包括获取属性的属性值.设置属性的属性值,并且可以删除掉属性. <script type="text/ja ...
- PHP JSON
- TAP/TUN(二)
tap.c代码 #include<assert.h> #include<fcntl.h> #include<stdio.h> #include<st ...