【问题标题】:Syncronization on the producer-consumer problem生产者-消费者问题的同步
【发布时间】:2019-09-09 10:07:55
【问题描述】:
我有一个关于生产者-消费者关系的作业问题,我不明白从哪里开始。
问题来了:
请考虑进程之间的生产者-消费者关系
并假设一个进程P1通过缓冲区发送一个5字节的消息到
流程 P2。 P2 从缓冲区中读取字符串 "SSNNEMANE NCATA",
而发送的消息P1是“CONNESSIONE MANCATA”。你能说什么
关于它们的同步(通过信号量实现)?
有人可以帮忙吗?谢谢!
【问题讨论】:
标签:
operating-system
buffer
ipc
semaphore
【解决方案1】:
我认为您的意思是通过 5 字节缓冲区发送消息。你只发布了一个片段,但我认为这个想法是看看应该发生什么;并将其与所做的比较,以生成有关缓冲区如何损坏的假设。
例如,我们如何让缓冲区进入包含 SSNE 的状态:
- 发送方应该能够立即将带有“CONNE”的前 5 个字节填充到缓冲区的索引 [0..4] 中。
- 接收方从缓冲区消耗 2 个字节后 (“CO”)。
- 发件人可以贡献“SS”;这将覆盖前两个索引 [0..1]。
- 此时缓冲区看起来像“SSNNE”。
假设 1:信号量可用性计数用于表示缓冲区中的可用空间。该计数已错误地初始化为 7 而不是 5,因此发送方正在破坏缓冲区。在上述步骤中;第 3 步在第 2 步之前进行。
假设 2:可用性信号量 (Hypothesis1) 被错误地用作互斥体,并且两个进程都独立地覆盖了头和尾缓冲区指针。
假设 3:...
现在,根据您看到的模式测试该假设的一致性 - 它是否会产生整个结果。
最后,检查代码,看看是否确实如此。
有效地重复这个生成假设的过程,直到找到解决方案。