生产者-消费者问题的同步化

时间:2019-09-09 10:07:55

标签: operating-system buffer ipc semaphore

我有一个关于生产者-消费者关系的家庭作业问题,我不知道从哪里开始。

问题出在这里

  

请考虑流程之间的生产者-消费者关系   并假定 进程P1 通过缓冲区发送 5字节消息    过程P2 P2 从缓冲区读取字符串“ SSNNEMANE NCATA” ,   发送的邮件 P1 “ CONNESSIONE MANCATA” 。你能说什么   关于它们的同步化(通过信号量实现)?

有人可以提供帮助吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您的意思是通过5字节缓冲区发送消息。您只发布了一个片段,但是我认为这个想法是要查看应该发生的情况。并将其与所做的比较,以得出有关缓冲区如何损坏的假设。

例如,如何使缓冲区进入包含SSNE的状态?

  1. 发送方应该能够立即将“ CONNE”的前5个字节填充到缓冲区的索引[0..4]中。
  2. 接收器从缓冲区(CO)消耗2个字节后。
  3. 发件人可以贡献“ SS”;会覆盖前两个索引[0..1]。
  4. 这时缓冲区看起来像“ SSNNE”。

假设1:信号量可用性计数用于表示缓冲区中的可用空间。该计数已被错误地初始化为7而不是5,因此发送方破坏了缓冲区。在上述步骤中;步骤3在步骤2之前进行。

Hypothesis2:可用性信号量(Hypothesis1)被错误地用作互斥量,并且两个进程都分别重写头和尾缓冲区指针。

假设3:...

现在,针对您看到的模式进行假设检验以确保一致性-是否可以生成整个结果。

最后,检查代码以查看是否确实如此。

有效地重复此生成假设的过程,直到找到解决方案为止。