Por que não há uma seção crítica no pipe?

0

Por que não há uma seção crítica no pipe? Por exemplo, como na memória compartilhada. Na tubulação tem dados gerais, que em uso comum em processos conjuntos, mas na memória compartilhada também têm dados gerais, que em uso comum em processos conjuntos.

    
por user1823811 19.11.2012 / 11:38

2 respostas

1

Não sei ao certo o que você está perguntando, acho que você está perguntando por que é que, se você usou memória compartilhada, também precisa usar o bloqueio para garantir que seu escritor e leitor não entrem em conflito, mas você pode escrever Lendo de um cano sem qualquer travamento. Naturalmente, a extensão do bloqueio requerido depende da estrutura de dados usada; por exemplo, há buffers de anel que são praticamente livres de bloqueio.

Se assim for, a resposta é bastante simples: um pipe é uma abstração. O bloqueio para o pipe (na medida em que as estruturas de dados do pipe o exigem) está oculto no kernel.

    
por 19.11.2012 / 17:57
0

O Pipe escreve e lê abaixo do tamanho PIPE_BUF (geralmente o mesmo que o tamanho de uma página de memória) são garantidamente atômicos, então não há necessidade de um mecanismo de sincronização da terra para protegê-lo - o kernel já está fazendo isso. Gravações / leituras maiores que PIPE_BUF exigiriam um mecanismo de sincronização. Na realidade, muitas vezes você não vê grandes volumes de dados sendo empurrados para baixo em um canal de uma só vez, então você não vê mutexes e esses são muito usados, mas eles são necessários quando circunstâncias além de PIPE_BUF surgem.

    
por 09.12.2013 / 17:57