操作系统实验三:用PV操作实现司机售票员进程同步(C语言实现)

本文主要是介绍操作系统实验三:用PV操作实现司机售票员进程同步(C语言实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码如下:
driver_spy.cpp

#include<stdio.h>
#include<stdlib.h>int S1 = 0, S2 = 1, sum = 0;  
char name[10] = "null";void driver(int s1, int s2, char name[]);
void busman(int s1, int s2, char name[]);
void p(int s, char name[]);
void v(int s, char name[]);
void addrecord();int main(){driver(S1, S2, "driver");busman(S1, S2, "busman");return 0;
}void driver(int s1, int s2, char name[])                              
{  		printf("离站开车\n");                      printf("正常行车\n");printf("到站停车\n"); v(s2, "driver");  //汽车到站,唤醒售票员开车门p(s1, "driver"); //初始S1=0,P(S1)后S1=-1,司机无法启动车辆,需等待售票员执行关门操作(V(S1)),需售票员关好门,唤醒司机,司机才能启动车辆 }
void busman(int s1, int s2, char name[])
{p(s2, "busman");	//售票员打开车门,需S2>0时。初始S2=0,售票员不能打开车门,需等司机执行V(S2)操作,唤醒售票员开门,售票员才能打开车门printf("开车门\n");printf("关车门\n");v(s1, "busman");	//售票员已关好车门,执行V(S1),唤醒司机启动车辆printf("售票\n");		
}void p(int s, char name[]){s = s-1;while(1){if( s >= 0 ){if(name == "driver"){printf("P(S1)操作\n收到开车信号\n"); break;}if(name == "busman"){printf("P(S2)操作 - 收到开车门信号\n"); 				break;}break;}if(s < 0)if(name == "driver"){printf("P(S1)操作 - 司机进程阻塞,等待售票员进程发出开车信号\n"); busman(s, S2, "busman");}if(name == "busman"){printf("P(S2)操作 - 收到开车门信号\n");driver(S1, s, "driver");}}}
void v(int s, char name[]){s = s+1;while(1){if( s > 0 ){if(name = "driver")printf("V(S2)操作 - 发出开车门信号\n"); break;}if(s <= 0) if(name == "busman"){sum++;printf("V(S1)操作 - 发出开车信号\n售票\n");sum++;if(sum>2)   //执行两次循环 exit(-1);driver(s, S2, "driver");}	}		
}

运行结果如图:
在这里插入图片描述

这篇关于操作系统实验三:用PV操作实现司机售票员进程同步(C语言实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/481333

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服