1.题目:桌上有一个能盛得下五个水果的空盘子。爸爸不停的向盘子中放苹果或者桔子,儿子不停的从盘子中取出桔子享用,女儿不停的从盘中取出苹果享用。规定三人不能同时使用盘子。试用信号量实现爸爸、儿子、女儿这三个循环进程之间的同步。

代码如下:

//苹果,橘子,盘子是临界资源
semaphore mutex = 1, plate = 5, apple = 0, orange = 0;
void father()
{while (true){buy fruits;wait(plate);wait(mutex);put in a fruit;signal(mutex);if (fruit == apple)signal(apple);elsesignal(orange);}
}
void boy()
{wait(orange);wait(mutex);put out and eat an orange;signal(mutex);signal(plate);
}
void girl()
{wait(apple);wait(mutex);put out and eat an apple;signal(mutex);signal(plate);
}

2.题目:试利用记录型信号量写出一个,至多只有四位哲学家去拿左边的筷子,不会死锁的哲学家进餐问题的算法。

代码如下:

semaphore chopstick[5] = {1, 1, 1, 1, 1};
semaphore mutex = 4;
void philosopher_i()
{while (true){wait(mutex);wait(chopstick[i]);wait(chopstick[(i + 1) % 5]);eating;signal(chopstick[i]);signal(chopstick[(i + 1) % 5]);wait(mutex);thinking;}
}

3.题目:请用信号量解决以下的“过独木桥”问题:同一方向的行人可连续过桥,当某一方向有人过桥时,另一方向的行人必须等待;当某一方向无人过桥时,另一方向的行人可以过桥。

代码如下

// 实现左右两边过桥方向的互斥访问,上下桥属于临界资源,需要互斥访问int left = 0, right = 0;           //分别表示左边和右边过桥的人数
semaphore mutex = 1,S_l=1,S_R=1;  //S_l  ,S_r  为对临界资源left和right的互斥访问void left()
{while (true){wait(S_l);     //临界资源互斥访问if (left == 0) //左边开始有人过wait(mutex);left = left + 1;signal(S_l);cross the bridge;wait(S_l);left = left - 1;if (left == 0) //左边所有人都过完signal(mutex);signal(S_l);}
}void right()
{wait(S_r);      //临界资源互斥访问if (right == 0) //右边开始有人过wait(mutex);right = right + 1;signal(S_r);cross the bridge;wait(S_r);right = right - 1;if (right == 0) //右边所有人都过完signal(mutex);signal(S_r);}
}

4.题目:嗜睡的理发师问题:一个理发店由一个有N张沙发的等候室和一个放有一张理发椅的理发室组成。没有顾客要理发时,理发师便去睡觉。当一个顾客走进理发店时,如果所有的沙发都已经被占用,他便离开理发店;否则,如果理发师正在为其他顾客理发,则该顾客就找一张空沙发坐下等待;如果理发师因无顾客正在睡觉,则由新到的顾客唤醒理发师为其理发。在理发完成后,顾客必须付费,直到理发师收费后才能离开理发店。试用信号量实现这一同步问题。

代码如下:

// 理发师问题
// 临界资源:barber_sofa:理发椅,sofa_ed_num:被占用的沙发的数量,costumer:顾客数量
// mutex实现customer_num的互斥访问;
// 收付款也是影响程序能否向下进行的互斥量:semaphore mutex = 1, barber_sofa = 1;
semaphore pay = 0,receive = 0;
int sofa_ed_num = 0; //被占用的沙发数量
void customer()
{come in;            //进店wait(mutex)                     //对临界资源sofa_ed_num的互斥访问if (sofa_ed_num >= N)       {leave;                  //沙发全被占用,离开理发店signal(mutex);          //customer_num 互斥访问结束}else {sofa_ed_num++;          //沙发没有被全部占用,坐到沙发上signal(mutex);          //customer_num 互斥访问结束wait(barber_sofa);      //等待理发椅空出wait(mutex);            //对临界资源sofa_ed_num的互斥访问sofa_ed_num--;          //顾客离开沙发signal(mutex);          //customer_num 互斥访问结束signal(customer);       //顾客到来,唤醒理发师hair cut;               //剪发signal(pay);            //顾客付款wait(receive);          //等待理发师收款siganl(barber_sofa);    //顾客让出理发椅leave;                  //离开}
}void barber()
{while (true){wait(customer); //当customer=0时,等待顾客到来,同时睡觉//customer 不为0,则执行如下操作harcuting;           //理发wait(pay);           //等待顾客付款signal(receive);     //理发师收款}
}

操作系统进程同步作业题相关推荐

  1. 进程同步算法实现实验报告Linux,操作系统进程同步实验报告.doc

    操作系统进程同步实验报告 实验三:进程同步实验 一.实验任务: (1)掌握操作系统的进程同步原理: (2)熟悉linux的进程同步原语: (3)设计程序,实现经典进程同步问题. 二.实验原理: (1) ...

  2. 操作系统进程同步例题(三)汽车过桥2

    操作系统进程同步例题(三)汽车过桥2 题目1: 在一个只允许单向行驶的十字路口,分别有若干由东向西,由南向北的车辆在等待通过十字路口.为了安全,每次只允许一辆车通过(比如:东到西或南到北).当有车辆通 ...

  3. 操作系统进程同步例题(一)上机实习

    操作系统进程同步例题(一)上机实习 题目: 某高校计算机系开设网络课并安排上机实习,设机房有共有2m台机器,有2n名学生选该课,规定: (1)每2个学生组成一组,各占一台机器,合作完成上机实习 (2) ...

  4. 操作系统概念作业题(1~6章)

    @操作系统概念作业题(1~6章) 第一章 1.资源利用问题在不同的操作系统中以不同的形式出现.请指出下面哪些资源必须被仔细地管理(请说明为什么) (1). 主机系统或微型计算机 (2). 通过服务器连 ...

  5. linux进程同步互斥实验小结,操作系统进程同步互斥实验

    <操作系统进程同步互斥实验>由会员分享,可在线阅读,更多相关<操作系统进程同步互斥实验(7页珍藏版)>请在人人文库网上搜索. 1.进程的同步互斥实验进程的同步互斥实验进程的同步 ...

  6. 计算机操作系统进程同步实验报告,操作系统进程同步和互斥的实验报告

    操作系统进程同步和互斥的实验报告 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 湖南农业大学信息科学技术学院学生实验报告姓名: 年级专 ...

  7. potplayer 多个进程_操作系统 | 进程同步与进程互斥

    主题            进程同步与进程互斥            01 进程同步  问题 在多道批处理系统中,多个进程是并发执行的,而并发执行的进程具有异步性,也就是说,各个进程以各自独立的.不可 ...

  8. 操作系统进程同步实验报告

    华侨大学计算机科学与技术学院 操作系统实验报告 进程同步 课程名称:操作系统实验 实验项目名称:进程同步 学    院:计算机科学与技术学院 专业班级: 姓    名: 学    号: 目录 1.描述 ...

  9. 操作系统-进程同步和进程互斥

    操作系统-王道老师 第二章02-进程同步和进程互斥 目录: 1.进程同步.进程互斥     1.1 进程同步     1.2 进程互斥 2.进程互斥的软件实现方法     2.1 单标志法     2 ...

  10. 操作系统——进程同步与互斥

    文章目录 进程同步与互斥 简介 进程间合作 进程间合作的问题 竞争条件 原子操作 临界区相关的几个概念 忙等待的互斥 基于硬件的同步解决办法:屏蔽中断 基于软件的同步解决方法 严格轮换法 Peters ...

最新文章

  1. c++ clr编译dll在c#调用时出现“试图加载不正确的格式”“找不到dll”错误的解决...
  2. 2021fall Bloomberg校招
  3. C/S架构应用程序开发培训笔记
  4. 利用dynamic简化数据库的访问
  5. numpy.loadtxt()用法
  6. (zz)Sql Server 2005中的架构(Schema)、用户(User)、角色(Role)和登录(Login)(三)
  7. Linux中wait接口用于延时,linux2.6驱动编写参考
  8. C++:02---命名空间
  9. C++(4)--初识变量、数据类型
  10. 谈谈 final、finally、 finalize 有什么不同?
  11. 这是一个最不缺“大师”的时代
  12. 菜鸟学Linux - 用户与用户组基础
  13. 古谚、评论与论断、名篇与名言
  14. Linux驱动系列目录
  15. 测试员一份工作坚持多久跳槽,才能完美提升薪资?
  16. 带头像的用户显示功能
  17. 《一键下单:杰夫·贝佐斯与亚马逊的崛起》—— 读后总结
  18. VBScript终极破产版石头剪刀布游戏(VBS语言实现)
  19. RGB,YUV的来历及其相互转换
  20. 物理学十大实验(1-5)

热门文章

  1. hiveql 没有left()right()函数,可用substr()替代
  2. 【2021-01-11】JS逆向之美团模拟登入
  3. 自动化测试平台(十三):接口自动化框架与平台对比及应用场景分析及设计思路分享
  4. 什么是PECL电平以及常用的匹配电路
  5. Greenplum小把戏 - 仿造Oracle rownum
  6. 百度Apollo的dreamview的frontend的数据传输部分简单梳理
  7. PHPUnit 在线中文手册
  8. 使用mmdetection做实例分割
  9. seo站内优化的10点建议及分析处理方案
  10. c#语言小括号里面的逗号是什么意思