Programação C

POSIX Semáforos com Programação C

POSIX Semáforos com Programação C

POSIX refere-se à interface portátil do sistema operacional, que é um padrão IEEE, desenvolvido para auxiliar a portabilidade de diferentes aplicativos. POSIX é um esforço para construir uma versão padronizada comum do UNIX através da colaboração de fornecedores. Isso tornaria a portabilidade de aplicativos entre plataformas de hardware mais fácil se eles fossem eficazes. A Hewlett-Packard está integrando POSIX em seu MPE / iX OS versão 5 licenciado.0 e HP / UXX versão 10.0, respectivamente (seu UNIX).

O padrão POSIX tem muito mais do que dez partes, no entanto, duas são facilmente obtidas. POSIX.1 descreve interfaces de programação C (i.e., uma biblioteca de chamadas do sistema) para arquivos, procedimentos e terminais de E / S. A biblioteca de pacotes C POSIX para plataformas POSIX é uma estrutura da biblioteca padrão C. Isso é estabelecido ao mesmo tempo que o padrão ANSI C. Para tornar POSIX compatível com o padrão C, várias tentativas foram feitas. POSIX fornece recursos adicionais aos implementados no padrão C.

POSIX Semáforos

Um semáforo é uma estrutura de dados frequentemente usada para sincronizar os processos e auxiliar os threads sem sua interação para operar juntos. A interface para semáforos é especificada pelo padrão POSIX. Não faz parte do Pthreads. No entanto, a maioria dos UNIXes que suportam Pthreads fornecem até mesmo semáforos. Em estruturas do tipo Unix, como o Linux, semáforos são mesclados com filas de mensagens e memória comum sob os serviços de comunicação entre processos (IPC). Os semáforos V do framework antigo e os semáforos POSIX modernos tornam-se dois tipos de semáforos. Chamadas de semáforo POSIX são muito mais fáceis do que chamadas de semáforo do System V. Embora os semáforos do System V sejam mais fáceis de obter, especialmente em plataformas semelhantes ao Unix anteriores. É necessário conectar programas usando semáforos POSIX à biblioteca Pthread. Vamos dar uma olhada nos semáforos POSIX neste artigo.

Por que POSIX semáforos?

Há um grande problema em torno dos threads, que é a "condição de corrida". É uma circunstância em que dois threads procuram obter e alterar as mesmas informações, tornando-as conflitantes. Para evitar uma condição de corrida, temos usado semáforos há muito tempo.

Os semáforos estão disponíveis em 2 tipos:

Semáforo Binário:

Também é reconhecido como um bloqueio mutex. Teria apenas dois valores possíveis, 0 e 1. O valor será inicializado como 1. Ele está sendo usado para impor vários processos para resolver o problema sério da seção.

Contando semáforo:

Seu tamanho pode variar em um domínio irrestrito. Ele está sendo usado para ter autoridade sobre o acesso a recursos de várias instâncias.

O framework Linux POSIX tem seu repositório Semaphore integrado. Para usá-lo, devemos:

Quase todos os métodos e formas do Semaphore POSIX são prototipados ou especificados em 'Semaphore.h '. Estaremos usando o semáforo para descrever uma entidade ou objeto como:

>> sem_t sem_name;

Aqui estão as diferentes funções que usaríamos no POSIX Semaphore.

Sem_init

Para inicializar um semáforo, você deve usar o método sem_init. Nesta função, sem corresponde a um objeto semáforo inicializado. Pshared é um banner ou sinalizador que especifica se o semáforo pode ser compartilhado com um procedimento bifurcado () ou não. Semáforos compartilhados atualmente não são reforçados por LinuxThreads. O valor do argumento é o valor inicial no qual o semáforo é fixado para.

>> int sem_init (sem_t * sem, int pshared, valor int sem sinal);

Sem_wait

Estaremos usando o método sem-wait para segurar / bloquear um semáforo ou fazê-lo esperar. Se o semáforo foi fornecido com um valor negativo, o ciclo de chamada será bloqueado automaticamente. Sempre que qualquer outro thread chama sem_post, um dos processos já obstruídos desperta.

>> int sem_wait (sem_t * sem);

Sem_post

Estaremos usando o método sem_post para aumentar o valor de um semáforo. Ao chamar, sem_post irá incrementar o valor, e um dos processos já obstruídos ou em espera desperta.

>> int sem_post (sem_t * sem);

Sem_getvalue

Se você quiser saber sobre o valor de um semáforo, você deve usar a função sem_getvalue abaixo. Ele obterá o valor presente do semáforo e será colocado no destino apontado por Valp.

>> Int sem_getvalue (sem_t * sem, int * valp);

Sem_destroy

Você deve usar o método sem_destroy se quiser destruir o semáforo. Se o fim do semáforo continuar, nenhum tópico ficará esperando no semáforo.

>> Int sem_destroy (sem_t * sem);

Instale o utilitário GCC

Para compilar o código POSIX Semaphore C, você deve ter o utilitário gcc instalado em seu sistema Linux. Para este propósito, abra seu terminal de comando e tente o comando abaixo.

$ sudo apt-get install gcc

Afirme sua ação batendo Y.

Implementação do POSIX Semaphore com programação C no Ubuntu

No início, você deve criar um novo arquivo com um .extensão cpp no ​​Ubuntu 20.04 sistema. Para isso, você deve navegar até o seu diretório pessoal e criar um novo arquivo vazio chamado novo.cpp. Você também pode criá-lo usando o comando touch em seu terminal de comando.

Você pode ver que o novo.O arquivo cpp foi criado no diretório inicial.


Após a criação do .arquivo cpp, abra-o como um editor de texto em seu sistema Linux e escreva o código abaixo neste arquivo como ele está. Depois disso, salve e feche-o.

Execute o programa POSIX Semaphore C no Ubuntu 20.04

Abra seu terminal no Ubuntu 20.04 e execute o comando gcc abaixo seguido do nome do arquivo.

$ gcc nome do arquivo.c -lpthread -lrt

Existem 2 fios formados, um é formado após 2 segundos do outro. Depois de receber o parafuso, o primeiro segmento dorme por 4 segundos. Então, depois de ter sido chamado, o segundo encadeamento não se uniria diretamente, e isso aparecerá 4-2 = 2 segundos depois de ter sido chamado. Aqui está o resultado:

Se não tivéssemos usado o semáforo, de acordo com a troca de contexto, o resultado poderia ter sido o observado:

Conclusão

Neste guia, uma visão geral detalhada do uso de POSIXSemaphore com programação C no Ubuntu 20 foi fornecida. Simplesmente usando a biblioteca POSIX ou Pthread em determinado código C, o Semaphore POSIX pode ser facilmente usado para evitar condições de corrida durante a codificação.

Adicione gestos do mouse ao Windows 10 usando essas ferramentas gratuitas
Nos últimos anos, os computadores e sistemas operacionais evoluíram muito. Houve um tempo em que os usuários tinham que usar comandos para navegar pel...
Controle e gerencie o movimento do mouse entre vários monitores no Windows 10
Gerenciador de mouse com tela dupla permite que você controle e configure o movimento do mouse entre vários monitores, diminuindo seus movimentos pert...
WinMouse permite que você personalize e melhore o movimento do ponteiro do mouse no PC com Windows
Se você quiser melhorar as funções padrão do ponteiro do mouse, use um freeware WinMouse. Ele adiciona mais recursos para ajudá-lo a obter o máximo do...