Posix semáforos em C

Posix semáforos em C

“Embora toda linguagem de programação tenha muitas bibliotecas para fins específicos, a biblioteca Posix de C tem seu lugar. Ele foi projetado para criar uma grande harmonização entre os processos e ajuda muito a usar o Multithreading nos programas, eu.e., criando vários tópicos e sincronizando sua execução. Dentro deste guia hoje, você verá uma ilustração simples de usar semáforos POSIX em C. Para os exemplos básicos de código C, devemos configurar seu compilador no sistema. Mas, antes disso, precisamos atualizar o sistema, pois é uma etapa obrigatória para a execução suave do código. Assim, a consulta exibida no snap anexada é um item obrigatório para atualizar e atualizar seu sistema operacional Linux com o utilitário "apt".”


Esse processo exigiu aproximadamente 55 kb de espaço em sua plataforma Linux para executar suavemente as atualizações. Se você estiver disposto a dar tanto espaço, toque em "y" para continuar. O processamento será concluído em alguns minutos.


Depois que o sistema foi totalmente atualizado, vamos configurar o compilador do idioma C em nosso sistema com o utilitário apt-get no comando "install". Use "GCC" como uma palavra -chave, e é isso.

Sem_init ()

Um semáforo fresco seria criado quando já houver um semáforo não identificado em "S"; Caso contrário, esse semáforo já existente será descartado. Ao longo deste método, "S" significa uma instância de semáforo que foi construída e compartilhada é um sinal ou galhardete que indica se o semáforo pode ser distribuído com um método bifurcado () ou de outra forma. O valor de entrada serve como o ponto de partida definido do semáforo.

Int sem_init (sem_t* s, int compartilhado, não assinado INT valor);

Sem_wait ()

Ao executar uma ação de bloqueio de semáforo sobre o semáforo que é especificado por "s", o método sem_wait () sustenta que o semáforo. O procedimento sem espera será usado para manter um semáforo ou deixá-lo ficar na linha. Alguns dos processos anteriormente sobrecarregados despertam quando algum outro processo invoca sem_post ().

int sem_wait (sem_t *s);

Sem_post ()

Quando o POST SEM é chamado, o valor é aumentado e, em seguida, uma das operações de backup anteriormente ou aguardando começa a ser executada, eu.e., desbloqueia o semáforo já trancado.

int sem_post (sem_t *s);

Sem_destroy ()

Um semáforo sem nome inicial "s" é destruído empregando a função SEM Destroy ().

int sem_destroy (sem_t *s);

Exemplo

Para entender as semáforos, vamos criar um arquivo C primeiro e depois adicionar um código a ele. Para criar um, use a consulta "Touch" e você encontrará o novo arquivo na pasta doméstico do seu sistema.


Agora, você deve abrir seu arquivo C vazio com algum editor simples para gerar um bom código nele. Temos tentado o editor de "nano" até agora, como mostrado no snap.


Como todos sabemos, todas as linguagens de programação não podem funcionar sem bibliotecas, pois essas bibliotecas mantêm um grande número de classes, estruturas, funções e objetos a serem utilizados para funcionamento geral do sistema. Então, estamos iniciando este programa C com o uso de algumas bibliotecas básicas e indispensáveis ​​para as semáforos POSIX.

Para usar essas bibliotecas no código, precisamos usar o personagem "#" com a palavra -chave "incluir" para cada biblioteca. No momento, adicionamos um total de 4 bibliotecas que devem ter neste programa. Caso contrário, nosso programa não funcionará corretamente. O primeiro “stdio.A biblioteca de cabeçalho H ”geralmente é um programa obrigatório em cada programa C, porque nos permite ter operações de entrada e saída no código. Portanto, estamos usando -o para adicionar facilidade e obter saídas do código. A segunda biblioteca que estamos usando aqui é o “Pthread.h ”isso é uma obrigação para o uso da programação de threads, eu.e., multithreading.

Usaremos esta biblioteca para criar threads em um programa. A próxima e mais importante biblioteca neste código é o “Semáforo.h ". Foi utilizado para sincronizar suavemente os threads. Por último, mas não menos importante, a biblioteca é “unistd.H ”, que nos permite usar funções e constantes diversas definidas pelo usuário. Agora, declaramos o semáforo "S" usando o objeto interno "sem_t" da biblioteca semáfore. Aqui vem a função definida pelo usuário do thread "T" sem tipo de retorno. Ele tem utilizado algumas funções semáforo integradas para executar a sincronização. A função sem_wait () está aqui para manter o semáforo "s" usando o caractere "&".

Dentro da declaração de espera, a declaração printf () foi executada junto com a função "Sleep" para fazer deste programa dormir por 4 segundos. Outra instrução printf () exibe uma nova mensagem, e a função sem_post () é executada para liberar o bloqueio no semáforo “S.”

#incluir
#incluir
#incluir
#incluir
sem_t s;
void * t (void * arg)
sem_wait (& s);
printf ("Bem -vindo! \ n ");
sono (4);
printf ("Tchau!\ n ");
sem_post (& s);

Vamos dar uma boa olhada no método principal () deste programa C para semáforos. A função sem_init () foi utilizada aqui para criar um novo semáforo "s" que não foi distribuído com um método bifurcado (), i.e., "0", e seu ponto de partida é definido como 1. O objeto Pthread_t da biblioteca PTHread de C foi utilizado para criar dois threads usando dois objetos de threads, O1 e O2. A instrução printf () está aqui para exibir que vamos criar o primeiro thread usando a função pthread_create () na próxima linha.

Temos passado o objeto O1 Thread para essa função com restrições nulas e a função de chamada "T", passando -o nos parâmetros. Após um sono de 4 segundos, outro tópico foi criado com o objeto O2, e a função pthread_join () é utilizada aqui para se juntar aos threads com uma função main (). A função sem_destroy () está aqui para destruir o semáforo "s", e todos os fios bloqueados também serão lançados.

int main ()
sem_init (& s, 0, 1);
pthread_t o1, o2;
printf ("Em um 1º tópico agora ... \ n");
pthread_create (& o1, null, t, null);
sono (4);
printf ("em um segundo tópico agora ... \ n");
pthread_create (& o2, null, t, null);
pthread_join (o1, nulo);
pthread_join (o2, nulo);
sem_destroy (& s);
retornar 0;

Estamos compilando o programa C com o compilador "GCC"; As opções "-lrt" e "-lPtHread" são utilizadas para executar as funções do thread POSIX. Ao executar o “.a/.OUT "consulta, o primeiro tópico foi criado. Ele vai dormir depois de imprimir a primeira mensagem.


O segundo tópico foi sincronizado e, após 4 segundos, o primeiro tópico foi lançado e o segundo tópico foi bloqueado por 4 segundos.


No final, o segundo tópico também foi lançado.

Conclusão

É isso sobre os semáforos Posix em C enquanto utiliza algumas de suas principais funções para sincronizar diferentes threads. Depois de passar por este artigo, você poderá entender Posix cada vez mais.