![发送者和接收者之间的消息传递](https://linux22.com/image/127860/%E5%8F%91%E9%80%81%E8%80%85%E5%92%8C%E6%8E%A5%E6%94%B6%E8%80%85%E4%B9%8B%E9%97%B4%E7%9A%84%E6%B6%88%E6%81%AF%E4%BC%A0%E9%80%92.png)
在消息传递(生产者-消费者)中,当发送进程被阻塞直到接收进程或邮箱收到消息时,就会发生阻塞发送。
阻塞接收是指接收方阻塞直到有消息可用为止。
当我们使用阻塞的 send() 和 receive() 语句时,生产者-消费者问题的解决方案就变得微不足道了。
为什么它变得微不足道?
答案1
您似乎引用的书(“操作系统概念”- Silberschatz、Galvin、Gagne)对此主题有这样的说法:
send() 和 receive() 的不同组合是可能的。当 send() 和 receive() 都阻塞时,发送者和接收者之间就会有一个会合点。当我们使用阻塞的 send() 和 receive() 语句时,生产者-消费者问题的解决方案就变得微不足道了。生产者仅调用阻塞的 send() 调用并等待消息传递到接收者或邮箱。同样,当消费者调用 receive() 时,它会阻塞,直到消息可用。
对我来说这似乎很清楚。
答案2
您的问题的答案是:请尝试实现一种读写非阻塞的消费者-生产者问题的解决方案。
如果你这样做,也就是说,如果你考虑如何解决非阻塞读/写操作的问题,你很快就会发现,你需要进行缓冲区管理。然后你会发现,在并发情况下,你必须处理读者/作者的公平性等问题。问题很快就会变得多方面,一些子问题(公平性)没有明显的解决方案。