如何阻止管道中的写入,直到读取发生? (在 C 中)
Posted
技术标签:
【中文标题】如何阻止管道中的写入,直到读取发生? (在 C 中)【英文标题】:How to block writing in pipes, until the read has taken place ? (in C) 【发布时间】:2010-12-24 15:19:35 【问题描述】:我目前正在编写一些 C 程序,我想知道是否有机会阻止写入进程中的写入(直到读取完成)?即我在父进程和子进程之间有 3 个管道(父进程写入,子进程读取),我想让父进程只写入完成读取的进程:)
我希望它很清楚..
提前致谢。
【问题讨论】:
【参考方案1】:bmargulies 是正确的。然而,创建更复杂协议的另一种方法是在父进程中使用多个线程——每个子进程一个线程。一个线程可能会因子进程缓慢而阻塞,但其他线程可以继续处理它们的子进程。根据您的问题的详细信息,这可能会解决问题。
【讨论】:
所以没有办法确定管道中的其他进程是否因读取而阻塞?.. 看来我要使用信号了【参考方案2】:内核对管道有缓冲区限制,如果缓冲区填满,写入程序将阻塞。
如果您想使用自己的消息边界来执行此操作,而不仅仅是基于缓冲区大小,那么您可以构建一个更复杂的协议,例如在发送之前让管道上的读取器阻塞另一种方式没有了。
【讨论】:
以上是关于如何阻止管道中的写入,直到读取发生? (在 C 中)的主要内容,如果未能解决你的问题,请参考以下文章