专业课程设计I报告
(2011 / 2012 学年 第 二 学期)
题目1: 进程的同步与互斥
题目2: 计算机图形动画
专 业 计算机科学与技术 学 生 姓 名 黄金花 班 级 学 号 B09040208 指 导 教 师 黄海平 指 导 单 位 计算机学院 日 期 2012.4.16-4.26
指导教师成绩评定表
学生姓名 评分内容 平时成绩 班级学号 评分标准 认真对待课程设计,遵守实验室规定,上机不迟到早退,不做和设计无关的事 设计的科学、合理性 功能丰富、符合题目要求 设计成果 界面友好、外观漂亮、大方 程序功能执行的正确性 程序算法执行的效能 设计报告正确合理、反映系统设计流程 设计报告 文档内容详实程度 文档格式规范、排版美观 简练、准确阐述设计内容,能准确有条理回答各种问题,系统演示顺利。 专业 优秀 计算机科学与技术 良好 中等 差 √ 验收答辩 评分等级 指导教师 简短评语 该同学出勤率(满勤、较高、一般,较低),学习态度(端正、较端正、一般、较差),演示程序(未)达到了(基本要求、提高要求1或/和2),撰写报告格式(规范、一般)、表述(清晰、一般、不清楚),圆满(较好、基本)完成了课题任务。(可选:尚存在??缺陷。) 指导教师签名 备注
日期 2012-4-30 评分等级有五种:优秀、良好、中等、及格、不及格
教师对学生的项目评分——进程的同步与互斥
一、 课题内容和要求
1、课题内容
题目:教师对学生的项目评分——进程的同步与互斥
内容:在一个班上有S个学生。每个学生都要做一个项目,每一个项目由K个老师一起评分。总共有M个老师。每个老师最多给N个项目评分。其中,S*K<=M*N。 在项目结束后,老师们提供T分钟用来检查学生们的项目。检查每一个学生的项目需要用时D分钟。其中,T>D。每一个学生的项目由K个老师共同来检查。在
T分钟的时间段内,学生可以在任何时间进入教室(random),除了在最后的D分钟内。所有的老师一直保持工作状态直到他检查完N个项目或者是T分钟过去后。
T分钟过去后,所有的老师和同学都必须离开教室。另外,在T分钟结束前的D分钟内(即在最后的D分钟内),如果有任何老师或者是学生都处在没有任务的状态下,都必须离开教室,因为已经没有时间让他完成任务了(因为一个项目检查的时间是整整D分钟)。 具体过程:
当一个学生进入教室后,他立即开始找K个没有任务的老师(一次找一个老师,假如没有空闲的老师,则等到有老师为止),找齐K个老师之后给老师检查,然后离开教室。刚开始每一个老师都是处于空闲状态直到他被学生找到,被学生找到后只能等待,直到学生找齐K个老师(在等待学生找其他老师的时间里,他是不能接受其他同学检查作业的请求的),当学生找齐K个老师后,老师们执行完检查任务,然后重新变成空闲状态。每个老师在总共检查了N个学生的作业后,离开教室。 2.课程要求
用一个程序来模拟上面描述的作业检查过程。每一个学生和每一个老师应该用不同的线程来完成。可以选用C、C++和Java作为开发语言,但是考虑到专业课程设计I的实验大纲,请尽可能使用Java语言。 提高要求:
(1) 考虑到跨平台的特性,请尽量使用posix线程标准(采用该标准有额外的加分);
(2) 实现良好的图形用户界面;
(3) 在程序演示过程中能清晰的展示多个学生线程和多个老师线程的同步和互斥流程。
二、需求和思路分析
该课题主要考察操作系统中PV操作知识点,涉及到多进程管理和死锁的相关知识。
1.为了实现老师与学生能协调进行下去,可以采用多线程,这里可以使用三种线程:总线程,老师线程,学生线程。
(1).总线程:主线程作为主类,实现对老师线程和学生线程的调用 产生老师线程,并激活;
产生随机数来定义每个学生进入的时间; 产生学生线程;并按上面产生的时间激活; 时间结束,程序结束; (2).老师线程:
(0) 老师进入教室;
(1) 在教室中空闲;
(2) 直到被一个学生选择后等待(所有K个老师聚集); (3) 等待结束项目检查开始; (4) 做D分钟的项目检查;
(5) N次检查完毕或者T分钟时间到,离开教室。否则回到(1) (3).学生线程: (0)进入教室
(1) 选择一个进入的时间(random()%(T-D))minutes ; (2) 进入教室;
(3) 选择K个空闲的老师,若找不齐,则等待; (4) 找齐后,做D分钟的检查; (5) 检查完毕离开教室。
2.在此题目要求中涉及PV操作的有学生选择老师阶段,在学生选择老师时刻,可能出现学生甲,学生乙同时发现有K个老师,于是每个人占有了一部分但又不够,且不放开资源,造成死锁的现象,对于这一问题可以设定,只要有一个学生在选择老师时,其他的学生都不可以选,一个人选完了,另外一个人才可以再选,这样就避免了死锁的发生;
还有一个同步和互斥的问题,教室每次只可以进去或出来一个人,即学生、老师不可以同时进入教室,离开教室。这可以通过相关修饰符来解决; 以上两个问题皆可以用修饰符synchronized来解决。
如果线程进入,则得到对象锁,那么别的线程在该类所有对象上的任何操作都不能进行。
3.注意事项
(1) 在剩余时间小于D时,一个已创建的学生线程只能执行第(5)步,不能再创建新的学生线程;
(2) 在剩余时间小于D时,一个老师进程只能在执行(3)—(4)步或者直接执行第(5)步;
(3) 对于所有合理的S, M, K, N, T, D数值(这些数必须都是正整数并且满足条件:S*K<=M*N and T>D),你的程序都能够运行成功;
(4) 你的程序对所有的时间安排策略都必须运行成功。例如不管线程的相对速度,例如要把握好sleep的毫秒数;
(5) 在每一个线程的生命周期内,每一步都要有一个合理的说明信息,来表明这个线程中包括哪个老师,哪个学生,进行到什么程度了;
(6) 要特别注意防范死锁问题的发生。
三、概要设计
1. 主类
通过人机对话获得所需要的学生人数S,老师人数M,学生需要接受检查的老师数K,老师最多检查学生数N,学生接受检查所需时间D,总时间 T。创建获取时间函数,进入,离开公共函数,供学生线程和老师线程使用,调用随机函数产生学生线程产生的时间,接着产生老师线程,等老师线程全部产生,一旦学