gpt4 book ai didi

c++ - 无需信号量即可同步父级和子级

转载 作者:行者123 更新时间:2023-11-30 19:11:40 26 4
gpt4 key购买 nike

(没有信号量或线程,只有进程)

我想从父文件中读取数据并通过管道将其传递给子文件。假设文件中的数据是

Is
This
Possible?

现在通过管道读取“Is”后

  1. child 如何知道新数据“This”已被传递并且应该被读取
  2. 通过管道读取“可能?”后的终止条件是什么,以便子进程在读取完父进程想要​​传递的所有数据后终止

(不使用信号量或线程,只是简单的进程,即 fork )

提前致谢

最佳答案

父级写入文件和子级读取文件需要您正在考虑的同步。也就是说,如果父级仅写入了第一行,而子级已读取该行,但父级写入了第 2 行,则子级过早遇到 EOF。

但是,管道则不然。

管道保持打开状态,直到父级/发送者关闭它[或子级终止]。因此,子进程可以循环读取,直到收到 EOF。

如果没有可用数据,子进程将自动阻塞读取,但不会过早获得 EOF。如果您愿意, child 可以执行 select(2)poll(2) 来检查数据是否可用,但我认为这没有必要。

子级将不会得到EOF,直到父级发送完所有数据关闭其管道末端。

因此,不需要同步。

另一方面,我们可能有一个父级快速发送大量数据,而子级读取速度很慢(即)有点落后。最终,[内核]管道缓冲区变得“满”,并且父级写入将被阻塞,直到子级能够“ catch ”并耗尽一些数据。因此,没有数据“丢失”。

关于c++ - 无需信号量即可同步父级和子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39440574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com