关于ucore管程实现中next_count的想法
匿名2023/07/31 19:49:36提问
    2016lecture19student
311

在完成lab7的时候突然考虑到ucore实现中一种情况可能会导致管程next_count大于1,但课上课下老师和同学说next_count不会大于1(我之前也一直认为不会大于1)

构造这种情况需要使用3个线程a,b,c、2个条件c1,c2,对应函数大概如下

  • func_a(): wait(c1)
  • func_b(): wait(c2) signal(c1)
  • func_c(): signal(c2)

假设abc依次执行。

  1. 线程a遇到条件c1阻塞,于是在wait中关闭互斥锁。
  2. 线程b进入,遇到条件c2阻塞,并在wait中关闭互斥锁。
  3. 线程c进入,在signal函数中up条件c2的信号量,并down信号量next阻塞(Hoare机制),next_count为1
  4. 线程b继续执行,在signal函数中由于c1被线程a需求,于是线程b会up条件c1的信号量,并down信号量next阻塞,此时,next被down了两次,对应next_count为2
  5. 线程a结束,结束时唤醒线程b,唤醒后next_count减为1
  6. 线程b结束,结束时唤醒线程c,唤醒后next_count为0
  7. 线程c结束,关闭互斥锁

回答(1
    推荐问答
      Simple Empty
      暂无数据