2017-02-11 2 views
2

В книге я прочитал, что для того, чтобы сделать межпроцессную связь с использованием труб между двумя процессами, предпочтительно использовать две трубы, которые будут для детей писать в это и для отца, чтобы читать от него, а другой - для противоположного общения. Почему это лучший способ? Нельзя ли использовать только одну трубу, чтобы как родитель, так и дети могли читать и писать на это?Inter-Process Communication, Operating Systems, Pipes

ответ

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, уязвимы для тех задач планирования, которые OS-пользователи обозначили в своих работах.

Трубы сами блокируют конструкции, поэтому они зависят от них для синхронизации.

//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); 
} 
Смежные вопросы