C pthread_detach Uso da função

C pthread_detach Uso da função
Como todos sabemos, os threads são a parte principal de qualquer processamento enquanto trabalham em qualquer ambiente multiprocessante. A rosca é um conceito usado na programação também. C O idioma cria uma API chamada "Posix" para permitir o uso de threads de diferentes propósitos usados ​​em nosso pedaço de código. Um desses threads é a função "pthread_detach ()" usada para identificar ou especificar um encadeamento como desconectado completamente. Além disso, garantirá todos os recursos usados ​​por esse tópico específico. Neste artigo, discutiremos o uso da função pthread_detach () na linguagem C usando o Ubuntu 20.04 Sistema.

Exemplo 01:

Vamos ter o primeiro exemplo para ver o funcionamento da função pthread_detach. Comece com o terminal lançando -o, eu.e., Ctrl+alt+t. Usaremos comandos específicos para criar um arquivo C, abrindo e executando -o. O primeiro comando é gerar um novo arquivo com ele, eu.e., tocar. Este novo arquivo precisa abrir em um editor em que podemos adicionar código a ele e fazer alterações também. Temos usado o editor "Nano" aqui através de seu comando.

Iniciamos a implementação do primeiro exemplo com alguns arquivos de cabeçalho necessários para que este código seja executado. Nosso código contém duas funções definidas pelo usuário e 1 método main (). Como a execução sempre começa no método principal (), também iniciamos a explicação do principal (). A função principal () é chamada de método "createt" em sua primeira linha. Agora o controle é dado à função "createt". Esta função cria um objeto "th" para obter o ID do thread usando pthread_t embutido mutável. A instrução PRIMF mostra que estamos atualmente no tópico principal ou 1st função.

A função "pthread_create" é usada aqui para criar um novo thread nesta função utilizando o nome de outra função, eu.e., Nova e vinculativa a variável "th" para fazer referência ao id. A instrução "se" é utilizada para verificar se essa função principal () e outros threads recém -criados são iguais ou não. Isso foi feito ao equiparar os IDs de ambos os threads. A referência mutável "Th" ao novo thread e Pthread_self () retorna o ID da função "Createt". Se ambos os threads corresponderem, ele imprimirá "Trecos são mesmos"; Caso contrário, “os tópicos não são os mesmos.”A função pthread_join () garante que a execução do encadeamento principal seja encerrada até que o novo thread seja executado e não seja concluído. Agora o controle está inteiramente para o novo tópico.

Em novo tópico, a função de sono é usada. Portanto, o sistema dormirá por 10 segundos e, depois disso, a execução adicional ocorrerá. A função pthread_detach () está aqui para destacar completamente o novo thread de sua função de chamada, eu.e., “Createt.”Aqui, pthread_self () é usado para descobrir o id de 'novo thread' para destacar. A instrução printf exibirá que este thread de função sairá agora. O sistema dormirá pelos próximos 10 segundos novamente usando o mesmo método "Sleep ()" de C. A função pthread_exit () está aqui para encerrar rapidamente o segmento atual, que agora é “novo.”Agora, o controle é devolvido à função" createt ". Depois de voltar neste tópico principal, encontramos uma nova declaração PRIMF para exibir que estamos de volta à função "createt". Agora, precisamos usar outra função pthread_exit () para fechar o thread "createt" também e dar o controle de volta à função principal (). Então, fizemos isso até agora, e o controle é devolvido. Aqui, o programa termina. À medida que o programa termina, precisamos compilá -lo com o compilador C no Ubuntu 20.04.

Você deve garantir que o compilador C já esteja configurado em sua máquina final. Temos utilizado o compilador GCC em nossa concha. Portanto, o nome de um arquivo com a palavra-chave “-lpThread” é usado para compilar o código conforme a imagem abaixo.

Depois de compilar o código, temos que executá -lo para ver a saída. O comando de execução é “./a.fora ”como abaixo. Quando executamos o arquivo de código, ele iniciou a função principal e a função principal () chamada de função "createt". A instrução PRINTF de "Createt" exibiu "Inside Main Thread" e criou um novo thread chamado Novo. Uma comparação de ambos os threads foi feita e retorna os dois threads não são os mesmos. Então, um sistema dorme por 10 segundos.

Após 10 segundos, ele se junta ao tópico criado novo. O novo tópico foi destacado da função "createt" e exibido que estamos na função "nova" do encadeamento. O sistema dorme novamente pelos próximos 10 segundos e sai do novo tópico.

Agora, o controle acabou com o tópico "createt" e correu que estamos de volta ao tópico principal. Após a conclusão do thread "createt", a função principal () recebeu controle. Portanto, o programa termina aqui com sucesso.

Exemplo 02:

Vamos dar uma olhada bem diferente no exemplo da função pthread_detach em c. Iniciamos nosso código C com os mesmos cabeçalhos da biblioteca com a palavra -chave #include para tornar nosso código executado. 1 função main () e 1 função definida pelo usuário chamada "novo" é definida. A função "nova" será usada como funções de thread. Estamos iniciando a explicação de um método main (). O Pthead_t Mutable está declarando a variável "Th" para obter o ID do thread de um novo tópico. A instrução PRIMF mostra que iniciamos a função principal e durma 10 segundos usando o método "Sleep". O próximo printf exibe que uma função de thread será criada e a função pthread_create () do POSIX é usada por esse motivo até agora.

O "TH" é usado como um parâmetro para a nova função de criação de thread para obter o ID de um novo thread. A função pthread_join () está aqui para suspender completamente a execução de um método main () até o novo tópico, i i.e., Novo, está executando. Agora, a nova função é iniciada. A função pthread_detach () está aqui para destacar completamente essa função da função principal () retomando seus recursos. A função pthread_exit () garantirá que o novo thread não seja mais executado. Portanto, sua instrução PRIMF não será executada. O encadeamento principal () será encerrado após a execução de sua função pthread_exit ().

Vamos começar com a compilação de código com o GCC. agradecidamente! Foi bem -sucedido.

Então, estamos utilizando o mesmo “./a.OUT ”instrução aqui também. A função principal () começou a executar primeiro à medida que a instrução de impressão sai. Agora, o sistema dorme por 10 segundos.

Após 10 segundos, a próxima declaração de impressão é executada e exibida que o novo thread é criado. O controle acabou para o novo thread e é destacado da função Main () sem executar sua instrução PRIMF. Portanto, nossa saída é algo como abaixo.

Conclusão:

Então, isso se tratava de usar a função Pthread_Detach de Posix em C para destacar completamente um tópico do tópico de chamada principal. Ao mantê -lo bastante simples e explicar as ilustrações brevemente, tentamos o nosso melhor para fazer você entender esses exemplos implementados no Ubuntu 20.04.