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

Syncronization on the producer-consumer problem

我有一道关于生产者-消费者关系的作业,不知从何下手

问题是:

Please consider the producer-consumer relationship between processes and suppose that a process P1 sends a 5 byte message through buffer to process P2. P2 reads the string "SSNNEMANE NCATA" from the buffer, while the message P1 sent is "CONNESSIONE MANCATA". What can you say about their syncronization (realized with semaphores)?

有人能帮忙吗?谢谢!

我想你的意思是通过 5 字节缓冲区发送消息。你只发布了一个片段,但我认为这个想法是看看应该发生什么;并将其与所做的比较,以生成关于缓冲区如何被破坏的假设。

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

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

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

假设 2:可用性信号量(假设 1)被错误地用作互斥锁,并且两个进程都独立地覆盖了头缓冲区和尾缓冲区指针。

假设 3:...

现在,根据您看到的模式检验该假设的一致性 - 它能否生成完整的结果。

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

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