线程&信号量解决方案

时间:2013-12-15 21:03:08

标签: c pthreads semaphore

我有一个我需要解决的问题,这是对问题的解释:

  • 我有n个学生线程
  • 我有单一教师话题
  • 教学可以只帮助一名学生
  • 学生可以打电话给老师寻求帮助,所以当第一个学生来到TA时,其他来到TA发现的学生很忙,必须等待椅子,只有3把椅子
  • 其他学生来到这里,发现椅子已满,
  • 将不得不卷土重来
  • 如果老师没有学生得到帮助,他会在椅子上检查学生,如果没有,他会去睡觉(什么也不做)

必须使用Threads和Semaphores实现此问题。

1 个答案:

答案 0 :(得分:0)

建议:

1)我会有一个教师线程和N个学生线程(就像你一样)。

2)我会有一个信号量。

3)我会有一个 chair array (你的“队列”);每个元素初始化为-1。

4)每当教师看到学生时,他就会锁定阵列,挑选一名学生,“清理”椅子,然后解锁阵列。

5)每当学生想要等待时,他会检查是否有自由椅,锁定阵列,“设置”椅子,并解锁阵列。

6)一旦你知道你有多少学生,我就会“malloc()”,然后初步确定这些椅子阵列。

7)如果这是C ++,“老师”,“学生”和“主席”都将成为课程。

... IMHO