利用信号量解决睡着的理发师问题。
1. 实验目的
加深对信号量的理解,以及用信号量来实现进程互斥功能。
2. 实验内容
利用信号量解决睡着的理发师问题。有一个理发师,一把理发椅和n把供等候理发的顾客坐的椅子。
- 如果没有顾客,理发师便在理发椅子上睡觉
- 当一个顾客到来时,必须唤醒理发师,进行理发
- 如果理发师正在理发时,又有顾客来到
- 如果有空椅子可坐,他就坐下来等
- 如果没有空椅子,他就离开
为理发师和顾客各编一段程序描述他们的行为,要求不能带有竞争条件。
线程创建函数:pthread_create(3): create new thread - Linux man page
在指定文件编写代码:
- 在文件
semaphore.h
实现信号量创建、加锁、解锁操作,或者直接使用系统的API - 在文件
barber.c
实现理发师代码,在customer.c
实现顾客代码,或者自行创建一个文件barber_customer.c
将所有代码放在一起
3. 实验要求
实验基本要求见:所有实验要求章节
截止时间:通常是一周时间,具体见课堂派作业提交截止时间
4. 评分
得分:
- 本次实验:10分
- 伪代码:3分
- 理发师:2分
- 顾客:2分
- 其他(包含但不局限于报告可读性,测试):3分
- 评分由程序辅助判定+教师评分