Programação C

Posix Mutex com programação C

Posix Mutex com programação C
O artigo de hoje será focado no uso de Posix Mutex com programação C no Linux Mint 20. No entanto, antes de seguirmos para o nosso exemplo principal, gostaríamos primeiro de limpar algumas terminologias, para que você possa entender facilmente o cenário de exemplo que compartilharemos com você. Em sistemas operacionais, o conceito de threading é usado extensivamente. Threads são basicamente subprocessos delegados com tarefas diferentes. Você pode considerar o seguinte exemplo para entender o funcionamento dos threads.

Suponha que haja um thread principal A, cujo trabalho é calcular a soma das variáveis ​​w e y, onde w = x + 1, ey = z + 2. Os valores das variáveis ​​x e z devem ser buscados pelo usuário. Neste cenário, podemos criar dois threads, B e C. A tarefa do thread B será pegar o valor da variável x do usuário, incrementá-lo em 1 e salvá-lo na variável w. A tarefa do thread C será pegar o valor da variável z do usuário, incrementá-lo em 2 e salvá-lo na variável y. Finalmente, ambos os encadeamentos passarão esses resultados para o encadeamento principal A, que calculará sua soma e exibirá o resultado final.

Se não tivéssemos criado nenhum encadeamento neste cenário, todas as tarefas teriam sido realizadas pelo encadeamento principal A em um tempo muito maior. Desta forma, os threads podem realizar seus cálculos com eficiência, sem atrasos desnecessários. No entanto, existe uma preocupação muito grande com o uso de fios, que é conhecida como "condição de corrida". É uma situação em que dois threads tentam acessar e modificar os mesmos dados, deixando-os inconsistentes. Como programador, nosso objetivo deve ser evitar condições de corrida da maneira mais elegante.

A solução mais comumente empregada para evitar condições de corrida é o uso de Mutex. Mutex significa exclusão mútua e basicamente nos fornece um mecanismo de bloqueio que impede o acesso e a modificação dos dados críticos por mais de um usuário ao mesmo tempo. Desta forma, a consistência dos dados é garantida. Posix é basicamente uma biblioteca que nos apresenta diferentes funções integradas que tornam a implementação de threads e Mutex muito mais fácil. Com o exemplo a seguir, tentaremos aprender o uso de Posix Mutex com programação C no Linux Mint 20.

Exemplo de uso de Posix Mutex com programação C no Linux Mint 20

Realizaremos as três etapas a seguir para orientá-lo no uso de Posix Mutex com programação C no Linux Mint 20.

Etapa # 1: Criando um programa demonstrando o uso de Posix Mutex com programação C no Linux Mint 20

Em primeiro lugar, vamos criar um .arquivo cpp em nosso sistema Linux Mint 20. Vamos simplesmente ir para a nossa pasta Home, criar um documento vazio e chamá-lo de Mutex.cpp. Uma vez que nosso .arquivo cpp é criado, vamos abri-lo com o editor de texto. Em seguida, digitaremos o código mostrado nas imagens abaixo para nosso .arquivo cpp:

O código mostrado nas duas imagens acima criou dois tópicos diferentes. O primeiro thread corresponde ao Job # 1, enquanto o segundo thread corresponde ao Job # 2. Em seguida, criamos uma função de amostra chamada “Função Mutex”. Nesta função, estamos primeiro bloqueando a variável de bloqueio Mutex, e ela só será desbloqueada quando o thread # 1 terminar o Job # 1. Da mesma forma, a variável de bloqueio Mutex será novamente bloqueada pelo thread # 2 até que termine o Job # 2. Esta “Função Mutex” é chamada pela função “principal”.

Etapa 2: Compilando o programa C no Linux Mint 20

Depois de salvar o .arquivo cpp, vamos agora compilá-lo por meio do terminal Linux Mint 20 com o seguinte comando:

$ gcc -o Mutex Mutex.cpp -pthread

Aqui, “Mutex”, após o sinalizador “-o”, refere-se ao nome do arquivo objeto que será criado, enquanto “Mutex.cpp ”é o nome do original .arquivo cpp. O sinalizador “-pthread” é necessário para compilar este programa porque este programa é escrito ao usar a biblioteca “pthread”. Se você omitir este sinalizador, seu programa não será compilado e irá renderizar alguns erros. A compilação bem-sucedida de nosso .O arquivo cpp não produzirá nenhuma mensagem no terminal, conforme mostrado na imagem abaixo:

Etapa # 3: executando o programa C no Linux Mint 20

Depois que o arquivo objeto chamado “Mutex” for criado, podemos executá-lo usando o seguinte comando:

$ ./ Mutex

Na saída do nosso Mutex.programa cpp, você notará que o primeiro Job 1 foi iniciado, o que significa que o thread # 1 adquiriu o bloqueio Mutex. Depois disso, o Trabalho 1 termina depois de algum tempo. Então, o Job 2 começa, o que significa que o thread # 2 adquiriu o bloqueio Mutex. Ele só será desbloqueado quando o Trabalho 2 terminar.

Conclusão

Este artigo forneceu uma explicação detalhada do uso de Posix Mutex com programação C no Linux Mint 20. O Mutex pode ser usado de forma muito eficaz para evitar as condições de corrida durante a programação, simplesmente incluindo a biblioteca Posix ou pthread em nosso código C. Isso não só garantirá a consistência dos dados, mas também tornará o processamento muito mais eficiente.

A melhor coisa sobre como usar a biblioteca Posix no Linux é que não precisamos nem instalar nenhum software, pacote ou compilador especializado para ela. O código C pode simplesmente ser escrito em qualquer editor de texto padrão no Linux e pode ser compilado e executado com os compiladores gcc ou g ++ padrão. Isso prova ser uma camada adicional de facilidade e conveniência no uso de Posix Mutex com programação C no Linux Mint 20.

Como mostrar o contador de FPS em jogos Linux
Os jogos Linux tiveram um grande impulso quando a Valve anunciou o suporte Linux para o cliente Steam e seus jogos em 2012. Desde então, muitos jogos ...
Como baixar e jogar Sid Meier's Civilization VI no Linux
Introdução ao jogo Civilization 6 é uma versão moderna do conceito clássico introduzido na série de jogos Age of Empires. A ideia era bastante simples...
Como instalar e jogar Doom no Linux
Introdução ao Doom A série Doom teve origem nos anos 90 após o lançamento do Doom original. Foi um sucesso instantâneo e, a partir desse momento, a sé...