Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
msr

Pipes e semáforos: named e unamed

Recommended Posts

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

Share this post


Link to post
Share on other 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:

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.