问题
某高校计算机学院开设网络课并安排上机实验,假设机房共有2m台机器,有2n名学生选该课,规定:
1、每两个学生组成一组,各占一台机器,协同完成上机实验;
2、只有一组两个学生到齐,并且此时机房有空闲机器时,该组学生才能进入机房;
3、上机实验由一名教师检查,检查完毕,一组学生同时离开机房。 试用P、V操作模拟上机实验过程。
提示:以下是本篇文章正文内容,下面案例可供参考
一、问题分析
在这个问题中,学生,教师,门卫是并行操作,所以,可以设置一个学生进程,一个教师进程,一个门卫进程用来检查一组两个学生是否到齐。
然后需要确定信号量和其初始值,Student是必然需要的,表示是否有学生;
computer表示当前可用的计算机的数量;enter是机房的准入通道;Finish表示是否有学生完成了学习;
test是老师是否检查完一组学生。 初始情况下,除了computer设为2m,其余都应该是0。
二、解决代码
1.semaphore stduent = 0;
2.semaphore computer = 2m;
3.semaphore enter = 0;
4.semaphore finish = 0;
5.semaphore test = 0;
6.
7.//学生进程
8.Student() {
9. while(1) {
10. V(student); //有学生到达
11. P(enter); //申请进入
12. do(); //实习
13. V(finish); //完成实验
14. P(test); //申请检查
15. V(computer); //释放计算机
16. } //while
17.} //Student()
18.
19.//老师进程
20.Teacher() {
21. while(1) {
22. P(finsh); //等待学生实验结束
23. P(finsh); //等待另一个学生实验结束
24. test(); //检查
25. V(test); //允许学生离开
26. V(test); //允许另一个学生离开
27. } //while
28.} //Teacher()
29.
30.//门卫进程
31.Guard() {
32. while(1) {
33. P(student); //等待一名学生
34. P(student); //等待另一名学生
35. P(computer); //申请一台计算机
36. P(computer); //申请另一台计算机
37. V(enter); //允许学生进入
38. V(enter); //允许另一名学生进入
39. } //while
40.} //Guard()