我在一本书中读到,为了在两个进程之间使用管道进行进程间通信,最好使用两个管道,一个用于孩子写入,另一个用于父亲从中读取和另一个做相反的沟通。为什么这是一个更好的方法?我们不能只使用一个管道,以便父母和孩子都可以读取和写入?
答案 0 :(得分:0)
您需要一种方法来同步进程之间的通信,否则进程将一次又一次地读/写它所写/读的内容。例如如果你使用一个管道:
//parent
while(1)
{
write(p1);
//need a logic to wait so as to read what child wrote back and also so
// that we may not end up reading back what we wrote.
read(p1);
}
//child
while(1)
{
read(p1);
//need a logic to wait so as to read what child wrote back and also so
// that we may not end up reading back what we wrote.
write(p1);
}
找到同步或使用两个管道的傻瓜证明逻辑。我说万无一失的等待,因为像sleep()
或signals
这样的简单技术很容易受到操作系统人员在其工作中概述的调度问题的影响。
管道本身就是阻塞构造,因此依赖它们进行同步。
//parent
while(1)
{
write(p1);
//pipe blocks until till child writes something in pipe
read(p2);
}
//child
while(1)
{
//pipe waits for parent to write.
read(p1);
//parent is waiting to read.
write(p2);
}