1. 实验目的
用信号量来解决实际进程互斥问题,进而加深对信号量、进程互斥的理解,用信号量解决现实问题。
2. 实验内容
在服务器上用Vim编写一个程序,使用信号量解决IPC问题:独木桥。
有一座东西方向的独木桥,分别为下列3种情况,在指定文件编写代码,要求不能带有竞争条件。
(1) 每次只允许一个人过桥(2分)
在文件single_log_bridge_onlyone.c
文件上编写代码。
(2) 当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待(3分)
在文件single_log_bridge_same_direction.c
文件上编写代码。
(3) 当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人单独过桥(5分)
在文件single_log_bridge_same_direction_ew.c
文件上编写代码。
对于每一个实验,
- 需要哪些变量,包括普通变量和信号量,各个变量代表的含义及初值是多少
- 写出伪代码,并解释算法
- P(S)操作原语:若信号量S大于0,则S减1,否则进程进入睡眠
- V(S)操作原语:对信号量S的值加1
- 编程实现,并测试
一些有用资料:
- 线程创建函数:pthread_create(3): create new thread - Linux man page
- 信号量创建、加锁、解锁操作,直接使用库提供的API,见信号量操作
3. 实验要求
实验基本要求见:所有实验要求
截止时间:2023-05-09 23:00 (大概有两周时间可以做)
实验报告提交:提交到课堂派,同时上传pdf和markdown文档
4. 评分
得分:
- 本次实验:10分,三个小实验分别为2、3、5分。
- 评分由程序辅助判定+教师评分
[!Warning]
实验最看中的,是过程,认真去做,哪怕没有完成,将整个过程记录下来(遇到什么样的问题,付出哪些努力解决),呈现出你为本次实验所做的努力,依然可以得高分,甚至是满分。
5. 实验报告
见实验报告模板。