当前位置: 首页 > news >正文

沧州市做网站的外贸php网站源码

沧州市做网站的,外贸php网站源码,校园网站建设的请示,如何自己做一个app一.经典同步问题 在学习《操作系统》时#xff0c;会接触到进程的概念#xff0c;其中不可避免的接触到进程同步问题#xff0c;今天我们用熟悉的PV操作解决一些经典的进程同步问题。 二.生产者-消费者问题 1.问题描述 问题描述#xff1a;一组生产者进程和一组消费者进…一.经典同步问题 在学习《操作系统》时会接触到进程的概念其中不可避免的接触到进程同步问题今天我们用熟悉的PV操作解决一些经典的进程同步问题。 二.生产者-消费者问题 1.问题描述 问题描述一组生产者进程和一组消费者进程共享一个初始为空、大小为n的缓冲区只有缓冲区没满时生产者才能把消息放入缓冲区否则必须等待;只有缓冲区不空时消费者才能从中取出消息否则必须等待。由于缓冲区是临界资源它只允许一个生产者放入消息或一个消费者从中取出消息。 2.问题分析 1)关系分析。生产者和消费者对缓冲区互斥访问是互斥关系同时生产者和消费者又是一个相互协作的关系只有生产者生产之后消费者才能消费它们也是同步关系。2)整理思路。这里比较简单只有生产者和消费者两个进程正好是这两个进程存在着互斥关系和同步关系。那么需要解决的是互斥和同步PV操作的位置。3)信号量设置。信号量mutex 作为互斥信号量用于控制互斥访问缓冲池互斥信号量初值为1;信号量full用于记录当前缓冲池中的“满”缓冲区数初值为0。信号量empty用于记录当前缓冲池中的“空”缓冲区数初值为n。 3.PV描述 生产者-消费者进程的描述如下: semaphore mutex1 ; //临界区互斥信号量 semaphore emptyn; //空闲缓冲区 semaphore full0; //缓冲区初始化为空producer() { //生产者进程while (1) {produce an item in nextp; //生产数据P (empty); (要用什么 p一下) //获取空缓冲区单元P (mutex); (互斥夹紧) //进入临界区add nextp to buffer; (行为) //将数据放入缓冲区V (mutex) ;(互斥夹紧) //离开临界区释放互斥信号V(full); (提供什么 V一下) //满缓冲区数加1} }consumer() { //消费者进程while(1) {P (full) ; //获取满缓冲区单元P (mutex) ; //进入临界区remove an item from buffer; //从缓冲区中取出数据V (mutex) ; //离开临界区释放互斥信号量V (empty) ; //空缓冲区数加1consume the item; //消费数据} }三.复杂生产者-消费者问题 1.问题描述 问题描述桌子上有一个盘子每次只能向其中放入-一个水果。爸爸专向盘子中放苹果妈妈专向盘子中放橘子儿子专等吃盘子中的橘子女儿专等吃盘子中的苹果。只有盘子为空时爸爸或妈妈才可向盘子中放-一个水果;仅当盘子中有自己需要的水果时儿子或女儿可以从盘子中取出。 2.问题分析 1关系分析。这里的关系要稍复杂一些。由每次只能向其中放入一只水果可知爸爸和妈妈是互斥关系。爸爸和 女儿、妈妈和儿子是同步关系而且这两对进程必须连起来儿子和女儿之间没有互斥和同步关系因为他们是选择条件执行不可能并发如图所示。 2整理思路。这里有4个进程实际上可抽象为两个生产者和两个消费者被连接到大小为1的缓冲区上。 3信号量设置。首先将信号量plate 设置互斥信号量表示是否允许向盘子放入水果初值 为1表示允许放入且只允许放入一个。信号量apple表示盘子中是否有苹果初值为0 表示盘子为空不许取apple 1表示可以取。信号量orange表示盘子中是否有橘子 初值为0表示盘子为空不许取orange 1表示可以取。 3.PV描述 解决该问题的代码如下: semaphore plate1, apple0, orange0;dad() { //父亲进程while(1) {prepare an apple;P (plate) ; //互斥向盘中取、放水果put the apple on the plate; //向盘中放苹果V(apple) ; //允许取苹果} }mom() { //母亲进程while (1) {prepare an orange;P(plate) ; //互斥向盘中取、放水果put the orange on the plate; //向盘中放橘子V (orange) ; //允许取橘子} }son() { //儿子进程while (1) {P (orange) ; //互斥向盘中取橘子take an orange from the plate;V(plate) ; //允许向盘中取、放水果eat the orange;} }daughter() { //女儿进程while(1) {P (apple) ; // 互斥向盘中取苹果take an apple from the plate;V(plate) ; //允许向盘中取、放水果eat the apple ;} } 四.读者-写者问题 1.问题描述 问题描述有读者和写者两组并发进程共享-一个文件当两个或以上的读进程同时访问共享数据时不会产生副作用但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能导致数据不一致的错误。因此要求:①允许多个读者可以同时对文件执行读操作②只允许一个写者往文件中写信息③任意一 个写者在完成写操作之前不允许其他读者或写者工作④写者执行写操作前应让已有的读者和写者全部退出。 2.问题分析 1)关系分析。由题目分析读者和写者是互斥的写者和写者也是互斥的而读者和读者不存在互斥问题。 2)整理思路。两个进程即读者和写者。写者是比较简单的它和任何进程互斥用互斥信号量的P操作、V操作即可解决。读者的问题比较复杂它必须在实现与写者互斥的同时实现与其他读者的同步因此简单的一对P操作、V操作是无法解决问题的。这里用到了一个计数器用它来判断当前是否有读者读文件。当有读者时写者是无法写文件的此时读者会一直占用文件 当没有读者时写者才可以写文件。同时这里不同读者对计数器的访问也应该是互斥的。 3)信号量设置。首先设置信号量count为计数器用于记录当前读者的数量初值为0;设置mutex为互斥信号量用于保护更新count变量时的互斥;设置互斥信号量rw,用于保证读者和写者的互斥访问。 3.PV描述 代码如下 int count0; //用于记录当前的读者数量 semaphore mutex1 ; //用于保护更新count变量时的互斥 semaphore rw1; //用于保证读者和写者互斥地访问文件writer(){while(1) {P (rw) ; //互斥访问共享文件writing; //写入V (rw) ; //释放共享文件} }reader () { //读者进程while(1) {P (mutex) ; //互斥访问count变量if (count0) //当第一个读进程读共享文件时P (rw) ; //阻止写进程写count ; //读者计数器加1V (mutex) ; //释放互斥变量countreading; //读取P (mutex) ; //互斥访问count变量count-- ; //读者计数器减1if (count0) //当最后一一个读进程读完共享文件V(rw) ; //允许写进程写V (mutex) ; //释放互斥变量count} } 五.哲学家进餐问题 1.问题描述 问题描述一张圆桌边 上坐着5名哲学家每两名哲学家之间的桌上摆一根筷子 两根筷子中间是一碗米饭。哲学家们倾注毕生精力用于思考和进餐哲学家在思考时并不影响他人。只有当哲学家饥饿时才试图拿起左、右两根筷子(一根一根地拿起)。若筷子已在他人手则需要等待。饥饿的哲学家只有同时拿到了两根筷子才可以开始进餐进餐完毕后放下筷子继续思考。 2.问题分析 1)关系分析。5名哲学家与左右邻居对其中间筷子的访问是互斥关系。 2)整理思路。显然这里有5个进程。本题的关键是如何让一名哲学家拿到左右两根筷子而不造成死锁或饥饿现象。解决方法有两个:一是让他们同时拿两根筷子;二是对每名哲学家的动作制定规则避免饥饿或死锁现象的发生。 3)信号量设置。定义互斥信号量数组chopstick[5]{1,1,1,1,1},用于对5个筷子的互斥访问。哲学家按顺序编号为0~4哲学家i左边筷子的编号为i,哲学家右边筷子的编号为(i 1)%5。 3.PV描述 为防止死锁发生可对哲学家进程施加一些限制条件 比如至多允许4名哲学家同时进餐;仅当一名哲学家左右两边的筷子都可用时才允许他抓起筷子;对哲学家顺序编号要求奇数号哲学家先拿左边的筷子然后拿右边的筷子而偶数号哲学家刚好相反。制定的正确规则如下:假设采用第二种方法当一名哲学家左右两边的筷子都可用时才允许他抓起筷子。 semaphore chopstick[5]{1,1,1,1,1}; //初始化信号量 semaphore mutex1 ; //设置取筷子的信号量Pi(){ //i号哲学家的进程do {P (mutex) ; //在取筷子前获得互斥量P (chopstick[i]) ; //取左边筷子P (chopstick[ (i1)85]) ; //取右边筷子V (mutex) ; //释放取筷子的信号量eat; //进餐V (chopstick[i]) ; //放回左边筷子V (chopstick[ (i1)85]) ; //放回右边筷子think; //思考} while(l) ; } 六.吸烟者问题 1.问题描述 问题描述假设一个系统有三个抽烟者进程和一个供应者进程。每个抽烟者不停地卷烟并抽掉它但要卷起并抽掉一支烟 抽烟者需要有三种材料:烟草、纸和胶水。三个抽烟者中第一个拥有烟草第二个拥有纸第三个拥有胶水。供应者进程无限地提供三种材料供应者每次将两种材料放到桌子上拥有剩下那种材料的抽烟者卷一根烟并抽掉它 并给供应者一个信 号告诉已完成此时供应者就会将另外两种材料放到桌上如此重复(让三个抽烟者轮流地抽烟)。 2.问题分析 问题分析: 1)关系分析。供应者与三个抽烟者分别是同步关系。由于供应者无法同时满足两个或以上的抽烟者 三个抽烟者对抽烟这个动作互斥( 或由三个抽烟者轮流抽烟得知)。2)整理思路。显然这里有4个进程。供应者作为生产者向三个抽烟者提供材料。3)信号量设置。信号量offer1, offer2, offer3分别表示烟草和纸组合的资源、烟草和胶水组合的资源、纸和胶水组合的资源。信号量finish用于互斥进行抽烟动作。 3.PV描述 代码如下 int num0; //存储随机数 semaphore offer10; //定义信号量对应烟草和纸组合的资源 semaphore offer20; //定义信号量对应烟草和胶水组合的资源 semaphore offer30; //定义信号量对应纸和胶水组合的资源 semaphore finish0; //定义信号量表示抽烟是否完成process P1() { //供应者while(1) {num ;numnum%3;if (num0)V(offer1) ; //提供烟草和纸else if (num1)V (offer2) ; //提供烟草和胶水elseV(offer3) ; //提供纸和胶水任意两种材料放在桌子上;P (finish) ;} }process P2() { //拥有烟草者while(1) {P(offer3) ;拿纸和胶水卷成烟抽掉;V(finish) ;} }process P3() { //拥有纸者while (1) {P(offer2) ;拿烟草和胶水卷成烟抽掉;V(finish) ;} }process P4() { //拥有胶水者while (1) {P (offerl) ;拿烟草和纸卷成烟抽掉;V(finish) ;} }
http://www.sadfv.cn/news/5458/

相关文章:

  • 河南省住建厅网站豫建设标保洁公司哪家好
  • 仙桃网站制作网站设计python做网站的案例
  • 做swf网站关键词搜索引擎
  • 一个论坛网站应该怎么做昆明抖音推广
  • 网站建设与代运营产品介绍网站做微信支付
  • 建设银行公积金预约网站首页设计网站页面设计
  • 做甜品网站的需求分析郑州修了你官方网站
  • 图片无版权网站品牌策划公司的市场
  • 如何识别网站建设省建设执业资格注册中心网站
  • 巩义网站优化大宗商品平台
  • 重庆建网站cqiezscom网站排名优化软件哪家好
  • 黑龙江城乡建设厅网站做放单网站
  • 福州公司做网站水滴查企业查询
  • 免费做数学题的网站深圳发布广告的平台有哪些
  • 医疗网站专题怎样做一起做网店货源app
  • 网站设计成功案例自己的网站如何让百度收录
  • 公司关于网站设计公司的简介类似朋友圈wordpress
  • wordpress migrate.min.js是什么网站快速优化排名推荐
  • 随州制作网站怎样做网站推销产品
  • 网站页面footer的copy企业如何打造自己的品牌
  • 广告毕业设计作品网站形象墙设计
  • 做属于自己公司的网站搜索引擎优化技术
  • 大连 商城网站制作公司建设网站方向
  • 如何在网站做推广磁力搜索
  • 怎么去除自己做的网站免费域名x网站
  • 北京做公司网站公司做网站程序的都不关注seo
  • 外贸英文网站制作加强会计师事务所品牌建设
  • 网络营销品牌推广北京网站优化济南兴田德润简介电话
  • 天津建设网站分包服务卡临沂企业建站模板
  • 郑州最好网站制作公司WordPress禁用自适应