监视器如何保证互斥?

时间:2016-02-16 15:43:08

标签: concurrency theory mutual-exclusion

并发中的生产者/消费者问题:生产者生成东西并将它们附加到缓冲区。消费者从缓冲区中获取内容。消费者不想从空缓冲区中获取内容,并且生产者不希望将内容附加到完整缓冲区。

William Stallings的“操作系统”给出了以下用于解决生产者/消费者问题的监视器示例:

// Monitor

  append(char x) {
      if (count == N) cwait(notfull)
      buffer[nextin] = x
      nextin = (nextin + 1) % N
      count++
      csignal(nonempty)
  }

  take(char x) {
      if (count == 0) cwait(notempty)
      x = buffer[nextout]
      nextout = (nextout + 1) % N
      count--
      csignal(notfull)
  }

// Application using the monitor

  producer() {
      while (true) {
          produce(x)
          append(x)
      }
  }

  consumer() {
      while (true) {
          take(x)
          consume(x)
      }
  }

该书声称“一次只能在监视器中显示一个过程”[p.227]

如何强制执行此属性?

我可以看到这对于1个消费者和1个生产者是如何工作的,但是我没有看到它如何保护 - 例如 - 2个生产者同时写入缓冲区。

0 个答案:

没有答案