计算机操作系统实验报告 一、实验名称:售票员和汽车司机的进程同步问题 二、实验内容:创建两个进程模拟售票员和汽车司机的同步行为。 具体内容如下: 1. 司机的活动:启动车辆,正常行车,到站停车。 2. 售票员活动:关车门,售票,开车门。 3. 当发车时间到,售票员关好车门后,司机才能启动车辆,售票员才开始售票。当到站时,司机停稳车后,售票员才能打开车门,车上乘客先下车,然后站牌乘客上车。 三、 问题分析与设计 分析:司 机 与 售 票 员 要 协 同 工 作 :一 方 面 只 有 售 票 员 把 门 关 好 之 后司 机 才 可 开 车 , 因 此 售 票 员 关 好 门 之 后 要 通 知 司 机 开 车 , 然 后 售票 ; 另 一 方 面 , 也 只 有 司 机 把 车 停 下 之 后 售 票 员 才 能 开 门 让 乘 客 下车 和 上 车 , 因 此 , 此 时 司 机 应 通 知 售 票 员 。 汽 车 当 前 正 在 始 发 站 停车 让 乘 客 让 乘 客 上 车 , 因 此 , 必 须 设 置 一 定 的 信 号 量 来 实 现 他 们 之间 的 同 步 问 题 。 设 计 : 设 置 司 机 与 售 票 员 的 信 号 量 为 全 局 变 量 , 并 且 客 车 的 人 数 :现 在 人 数 、下 车 人 数 、上 车 人 数 为 全 局 变 量 ; 设 置 司 机 与 售 票 员 的线程。 考虑到第一 站 和 最后 一 站 的 问 题 , 应 单独处理, 故在 各自的线程中分情况讨论: 具体的 思路是下 面 的 图示。 其中 S 1 是司 机 的 信 号 量 , S 2 是售 票 员的 信 号 量 。 程 序 的 实 现 ( 代 码 ) : #include #include #include #include #define Total_num 50 //客 车 的 最 大 容 量 #define Total_pork 8 //总 的 站 数 //全 局 变 量 int Recent_num=0; //某 一时刻的 客 车 上的 人数 int Get_on_num; //上车 的 人数 int Get_off_num; //下车 的 人数 int pork=1; //客 车 到 达 路 线 的 站 数 HANDLE Semaphore_driver; //Driver 的 信 号 量 HANDLE Semaphore_conductor;//Conductor 的 信 号 量 //产 生 一定范围的 随机数 ,...