2017-02-11 54 views
2

我在一本书中读到,为了在两个进程之间使用管道进行进程间通信,最好使用两个管道,一个用于孩子写入它和父亲从它读取和另一个做相反的沟通。为什么这是一个更好的方法?我们不能只使用一个管道,以便父母和孩子都可以读取和写入吗?进程间通信,操作系统,管道

回答

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); 
} 

找到一个傻瓜证明逻辑来同步或使用两个管道。我说的是傻瓜等待,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); 
}