2
我在一本书中读到,为了在两个进程之间使用管道进行进程间通信,最好使用两个管道,一个用于孩子写入它和父亲从它读取和另一个做相反的沟通。为什么这是一个更好的方法?我们不能只使用一个管道,以便父母和孩子都可以读取和写入吗?进程间通信,操作系统,管道
我在一本书中读到,为了在两个进程之间使用管道进行进程间通信,最好使用两个管道,一个用于孩子写入它和父亲从它读取和另一个做相反的沟通。为什么这是一个更好的方法?我们不能只使用一个管道,以便父母和孩子都可以读取和写入吗?进程间通信,操作系统,管道
您需要一种方法来同步进程之间的通信,否则一个进程将读取/写入一次又一次写入/读取的内容。例如如果你使用一个管道:
//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);
}
找到一个傻瓜证明逻辑来同步或使用两个管道。我说的是傻瓜等待,cuz简单的技术,如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);
}