Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

msr

Pipes e semáforos: named e unamed

Mensagens Recomendadas

msr

Olá,

Alguem me sabe explicar as diferenças entre pipes anónimos e named pipes? Assim como named semaphores e unamed semaphores? Isto falando num contexto UNIX/POSIX.

Em que situações se devem utilizar uns e outros?

Em relação aos pipes:

Em qualquer um dos tipos de pipes a comunicação é feita através do núcleo?

Em relação aos semáforos:

De algum código que vi, deu-me a entender que os named semaphores são úteis para sincronizar processos. Uma vez que os processos nao partilham memória e uma vez que cada processo tem que "conhecer" o estado do semaforo, o estado do semaforo está armazenado no espaço do núcleo?

Por outro lado os unnamed semaphores ficam guardados em memoria partilhada sendo uteis no uso de threads. Estou a pensar bem? Ou mal? :) Estou um pouco confuso.

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
zecapistolas

Bom,

Named Pipes : São canais com nome para poderes comunicar algo entre dois processos. Esse canal com nome é um ficheiro do tipo FIFO, onde lês e escreves o que entenderes.

Pipe : São simples canais/"tubos" criados para comunicar com dois processos.

Em que situações se devem utilizar uns e outros?

  • Por exemplo, imagina uma situação de cliente/servidor, nesse caso o melhor é comunicar através de Named Pipe, assim cada cliente escreve no seu Named Pipe e o servidor trata de ler todos os Named Pipe.
  • Se tens um processo que no seu interior executa, por exemplo, um fork e depois precisas comunicar entre o processo Pai e o processo Filho, ai a melhor/rápida solução é o Pipe sem nome

Para sincronização de threads, só conheço semáforos (e não named semaphores, como tu referis-te) e mutex (que são semáforos inicializados com um).

Para a sincronização funcionar a variável que controla o semáforo deve ser global....

Aqui tens a explicação e exemplos de threads e sincronização....

cumps  :thumbsup:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Warrior

A ideia que tu tens está correcta, assim como o que o zecapistolas explicou.

A diferença do named para o unnamed está exactamente no nome.

Se usares algo nomeado, atribuis-lhe um nome, e qualquer coisa (processo ou thread) que conheça o seu nome pode usa-lo.

No caso de ser não nomeado, então é necessário que os processos tenham acesso partilhado àquela zona de memória para poderem utiliza-lo.

Pipes ou Semáforos (gostava de saber quem foi que traduziu semaphore para semáforo..) podem ser ambos nomeados, a ideia é a mesma.

Curiosamente, não existem mutexes nomeados (pelo menos pelo que pesquisei há uns tempos) pelo que a única solução é inicializar um semáforo a 1.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.