linux司机售票员问题
2019独角兽企业重金招聘Python工程师标准>>>
/*
*基于信号处理的司机与售票员进程同步问题
*题目要求:SIGINT(表开车),由售票员接收,发送信号SIGUSR1给司机,司机打印run the bus
*SIGQUIT(表停车),由售票员接收,发信号SIGUSR2给司机,司机打印stop the bus
*SIGTSTP(表车到总站),由司机接收,发信号SIGUSR1给售票员,售票员打印get off the bus
* */
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
pid_t pid;
void conductor_handler(int signo);
void driver_handler(int signo);
int main()
{
if((pid = fork()) < 0){ //pid为子进程号
perror("fork error.\n");
}
else if(pid == 0){ //child process conductor
signal(SIGTSTP,SIG_IGN); //conductor进程不接收ctrl-z
signal(SIGINT,conductor_handler);
signal(SIGQUIT,conductor_handler);
signal(SIGUSR1,conductor_handler);
while(1){
pause();
}
}
else{ //parent process driver
signal(SIGINT,SIG_IGN); //driver进程不接收ctrl-c
signal(SIGQUIT,SIG_IGN); //driver进程不接收ctrl-'\'
signal(SIGTSTP,driver_handler);
signal(SIGUSR1,driver_handler);
signal(SIGUSR2,driver_handler);
while(1){
pause();
}
}
return 0;
}
void conductor_handler(int signo)
{
switch(signo)
{
case SIGINT :
kill(getppid(),SIGUSR1);
break;
case SIGQUIT:
kill(getppid(),SIGUSR2);
break;
case SIGUSR1:
printf("Final station ,all get off.\n");
exit(0); //到终点子进程结束
}
}
void driver_handler(int signo)
{
switch(signo)
{
case SIGTSTP :
kill(pid,SIGUSR1);
wait(NULL); //等待子进程先结束,终点已到进程退出
exit(0);
case SIGUSR1 :
printf("bus will run...\n");
break;
case SIGUSR2 :
printf("bus will stop...\n");
break;
}
}
转载于:https://my.oschina.net/u/2546684/blog/686026
linux司机售票员问题相关推荐
- C Linux 公交司机售票员问题
#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<pthread.h> ...
- 操作系统P、V操作,司机-售票员问题(c++实现)
问题描述及信号量设定 设公共汽车上,司机和售票员的活动分别是: 司机:启动车辆–正常行驶–到站停车: 售票员:关车门–售票–开车门: 信号量(semaphore)的数据结构为一个值和一个指针,指针指向 ...
- c 语言实现司机与售票员线程,用多线程模拟汽车司机与售票员需求分析试验报告...
<用多线程模拟汽车司机与售票员需求分析试验报告>由会员分享,可在线阅读,更多相关<用多线程模拟汽车司机与售票员需求分析试验报告(5页珍藏版)>请在人人文库网上搜索. 1.操作系 ...
- 操作系统复习笔记(四)
10.司机和售票员之间要协同工作:一方面只有售票员把车门关好了司机才能开车,因此售票员关好车门应通知司机开车;另一方面只有当汽车已经停下时,售票员才能开门让乘客上下客,司机停车后应该通知售票员,假定某 ...
- 南京邮电大学操作系统实验二:线程的互斥与同步
实验原理及内容 基于互斥锁的临界区管理 使用编辑器gedit 2_1.c,新建一个2_1.c源文件,创建双线程并发完成订票操作,输入后面的范例代码: #include <stdio.h> ...
- 操作系统 (二): 进程与线程
本文为<现代操作系统>的读书笔记 目录 进程 (process) 多道程序设计模型 程序顺序执行与并发执行 前驱图和程序执行 并发执行 进程模型 进程控制 创建进程 进程是何时被创建的? ...
- 幼儿园教师怎么教计算机知识,幼儿园教师的常识教案大全
幼儿园教师的常识教案大全 幼教常识教案:十二生肖 设计意图: 随着新年的到来,周围环境中新年气氛也在不断浓厚起来,孩子们在挂历.广告中或多或少地了解到,今年是羊年.有幼儿说,今年生的小宝宝是属羊的.而 ...
- 冰炭不投day博客导航
文章目录 前言 一.Android应用层 1.Android之View篇[完结] 2.Android之Rxjava篇[完结] 3.Android之网络请求篇[完结] 4.Android之IPC篇[完结 ...
- IDCardReader-身份证信息写入Excel模板
介绍 身份证信息读取的软件IDCardReader.通过CVR100U读卡器,读取身份证信息,并可导出到任意定制的Excel模板.具备如下功能: 通用读卡 旅客登记 驾校报名 劳务实名登记 特种作业培 ...
- 计算机操作系统 PV题目
struct Semaphore{int value;queue process; }; 吃水果问题 问题描述: 桌子上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专吃 ...
最新文章
- 手把手教你怎么在linux安装c++编译器
- Quartz Java编程
- C语言-第21课 - 指针基础
- 用自然语言教育人工智能:百度新算法发展出zero-shot学习能力
- 【Spring-Cached】Cached之Caffeine
- 华为交换机常见STP/RSTP操作
- java罗马数字_整数转罗马数字以及罗马数字转整数(java实现)
- 不确定中找到确定性, IBM开出哪些疫后企业数字化新处方?
- 工厂模式之抽象工厂模式
- 【HUST】网络攻防实践|5_二进制文件补丁技术|实验二 getshell
- 激光打印机热定影器的组成以及维护
- (C++题目)定义一个描述学生基本情况的类Student,数据成员包括姓名、学号、英语成绩和高数成绩;成员函数包括构造函数、析构函数、获取姓名、获取学号、求出平均成绩,以及显示各
- 入手评测 华为擎云 L410怎么样
- 进化计算原理和实现(遗传算法)
- Java中Integer.MAX_VALUE/Integer.MIN_VALUE的含义
- NIST原子光谱数据库使用说明
- HashMap概述与用法总结
- 云原生Envoy边缘服务代理简介和使用指南
- 对标汽车之家,新势力杉车网的另类崛起
- 组合逻辑和时序逻辑的区别
热门文章
- Atitit. 解决unterminated string literal 缺失引号
- Atitit. 软件---多媒体区---- jmf 2.1.1 Java Media Framework 支持的格式
- 技术狂何波:战斗在程序化交易第一线
- 阿里巴巴四十大盗教你零知识证明
- 通力法评 | 简评中国证监会关于MOM产品的征求意见稿
- 新兴IT企业特斯拉(二)——特斯拉的诞生
- Open Source Drives IOT From Device to Edge
- 【心电信号】基于matlab心电信号PTT+HRV+PRV【含Matlab源码 158期】
- 毕设题目:Matlab表盘识别
- 【三维路径规划】基于matlab多种算法无人机三维路径规划【含Matlab源码 300期】