实验步骤与内容: 一、producer方法中: 1、准备message 每个message都有一个id,id用num表示,num代表某个producer产生的第几条message,这个值被放入到slot的value域中,message也带有另一个域thread_id其中放入producer的id号。 2、信号量的同步控制 首先要检查ring中是否已满,其中nempty的初值为ring的大小,当一个新的生产者到达之后,对nempty执行p操作,如果s的初值为零,则说明ring是满的,此时阻塞生产者进程,并用while循环查看s的值,当其不为零时跳出while循环,对s执行减一操作。若生产者可以放产品,那么就应该考虑临界区的问题,mutex初值为一,对其执行p操作,若临界区内没有程序正在执行。那么,mutex的值仍然为一,减一,producer进入临界区,执行put操作,否则,producer被阻塞直到mutex的值为一。当producer执行完get操作后,退出临界区,让mutex的值恢复为一,使下一个程序能够执行,并对nfull进行加一操作。宏观整个程序,发现每当一个producer执行操作时,会让nempty的值减一,nfull的值加一,这两个值总可以表示ring中空值的个数和满值的个数。 二、consumer方法中: 1、控制同步 在consumer方法中,consumer每次从ring中读取所有的message,因此for循环是无限循环的。其信号量机制和producer相似,但不同的是consumer每次要检查nfull以确保ring不为空,然后让nempty加一。 三、prodcons方法中:
nempty和nfull分别代表了ring中空和满的位置数,其和为buff_size,初始ring是空的,因此nfull和nempty初值分别为0和buff_size。mutex用来控制临界区,其初值为1,当为零时,其他程序不能进入临界区。
首先用for循环创建出两个producer线程,然后创建出两个consumer线程。 四、编译 第一次编译时 说明creat、exit、write没有被声明,在prodcons++中添加声明: 分别用来声明write、exit、create方法 第二次编译时报错不能声明<stdlib.h>,即包含exit的库,删除#include <stdlib.h>,查看ring.cc文件,发现 即exit方法在ring.cc中被声明,但是在prodcons++文件中只声明了ring.h文件,于是,讲这段代码复制粘贴到ring.h文件中去。 编译成功。。。。 五、运行结果 1、没有任何参数: 所有的message都被第一个consumer获取了,而第二个consumer没有获取message。 temp_0: temp_1为空。
temp_0: temp_1: 消费者零得到6条消息,消费者一得到2条消息。rs取值不同会产生不同结果。 |
详细解决方案
操作系统实验三 NACHOS Synchronization Using Semaphores
热度:13 发布时间:2023-11-26 20:30:28.0
相关解决方案
- c# vs2005 操作Excel 发布有关问题 急 报下面的错误, 服务器是2003 操作系统
- 统计一下子,大家开发都用什么工具的.操作系统?Microsoft Visual Studio 2005,Microsoft Visual SourceSafe哪一个板本
- ASP.NET的编程测试运行环境(操作系统、开发环境、数据库),该如何解决
- 汇编 操作系统,该怎么解决
- 操作系统!解决方案
- 操作系统!该怎么解决
- 求JAVA编的一个模拟 操作系统
- 各位老师,小弟我现在用的是Xp 操作系统,怎样在xp 操作系统下运行Asp 文件
- 怎么判断用户 IE版本 及 操作系统
- 操作系统 linux,在本机实施exp数据导出,导出的dmp中的汉字为乱码
- 如何用 JAVA 编成实现 获得本机的 内存信息 和 操作系统 信息 以及硬盘信息呢
- win7(32位)操作系统+VS2008 是否不能编译生成64位QT5.0.0的库
- Windows Phone Emulator 无法连接到Windows Phone 操作系统,求解决~该如何解决
- Windows Phone Emulator 没法连接到Windows Phone 操作系统,求解决~
- sqlce配置工具Configure Web Synchronization Wizard 的使用,该怎么解决
- 操作系统 分段机制,该如何处理
- 操作系统 扇区的题目解决思路
- 操作系统 扇区的标题
- sharepoint User Profile Synchronization Service无法启动解决方案
- 在哪可以次载 windows8 操作系统
- 黑猴子的家:VMware 15.5.7 安装华为 OpenEuler(欧拉) Linux(openEuler-20.03-LTS) 操作系统...
- 操作系统--关键问题
- 操作系统--基本概念
- 【考研】操作系统:2019年真题43(同步互斥问题)
- 【考研】操作系统:2014年真题47(同步互斥问题)
- 【考研】操作系统:2015年真题45(同步互斥问题)
- 【考研】操作系统:2009年真题45(同步互斥问题)
- 【操作系统】进程(线程)间同步互斥问题——高校上机实习问题
- 【操作系统】进程(线程)间同步互斥问题——熟睡的理发师问题
- 《Operating System Concepts(操作系统概念)》课程学习(6)——Chapter 6 PROCESS SYNCHRONIZATION(第6章 进程同步)