Tópico POSIX com programação C

Tópico POSIX com programação C
Um tópico é uma pequena instância em execução dentro de um processo. Os threads se combinam para criar um processo e têm algumas propriedades do processo; Portanto, eles são considerados processos leves. Tópico não é independente, assim como um processo. Em vez disso, eles trabalham juntos para compilar e criar um processo. Ainda assim, assim como um processo, um tópico também possui seu próprio PC (contador de programas) e um conjunto de registro específico junto com o espaço da pilha.

Tópico Posix:

Nas plataformas Linux, a API padrão C e C ++ PTHread para todos os tipos de funções relacionadas a threads. Também é conhecido como um thread POSIX que permite aos usuários criar muitos threads para processos simultâneos fluir. É melhor usado em sistemas ou processadores de vários núcleos para implementar threads no kernel para alcançar o sistema.

Implementação:

É necessário incluir este pThread.H Arquivo de cabeçalho no script inicialmente. Isso ajudará a usar as funções da biblioteca Pthreads. Para executar o arquivo C, os seguintes comandos

$ CC -PTHREAD ARQUIVO.c

OU

$ CC -LPTHREAD ARQUIVO.c

As funções definidas na biblioteca Pthreads podem incluir:

pthread_create:

É usado para criar um novo tópico

Parâmetros de pthread_create:

Tem os seguintes parâmetros:

fio: Isso atua como um ponteiro para um valor inteiro não assinado. Ele retorna o ID do thread do thread que é formado.

atributos: Este parâmetro atua como um ponteiro para uma estrutura. É usado para definir atributos de um tópico que pode ser a política de agendamento e o endereço da pilha, etc.

start_routine: Este parâmetro é um ponteiro para uma sub -rotina implementada pelo tópico.

argumento: Este parâmetro é um ponteiro para anular com diferentes argumentos para a função predefinida no início do argumento

Sintaxe:

>> int pthread_create
(pThread_t * thread, const pthread_attributes_t * attr, void * ( * start_routine) (void *), void * argumento);

pthread_exit:

É usado para encerrar ou encerrar um tópico

Parâmetros de pthread_exit:

O método usado no final do método/processo aceita um parâmetro retval que é um indicador obrigatório para um número inteiro. Ele armazena o status do fio de modo que o thread termine. Deve ser uma variável global. Isso permitirá que o próximo tópico na fila se junte ao tópico se estiver disponível.

Sintaxe:

>> void pthread_exit (void *retval);

pthread_join:

Esta é uma função usada no momento da espera pelo término do tópico.

Parâmetros para pthread_join:

O parâmetro usado aqui é:

Thread_id: É o id do tópico para o qual o tópico da fila espera.

Thread_return: É o parâmetro que atua como um ponteiro para o local específico, onde definimos o status de saída.

Sintaxe:

>> int pthread_join (pthread_t thread_identification, void ** thread_return);

pthread_self:

Este é um método usado para obter o ID do tópico atualmente na fila.

Sintaxe:

>> pthread_t pthread_self (void);

pthread_equal:

Este método é usado para comparar no caso de dois threads serem equivalentes ou não. Se dois threads forem iguais, a função retornará um valor diferente de zero em resposta.

Sintaxe:

>> int pthread_equal (pthread_t thread1, pthread_t thread2);

pthread_cancel:

Este método é usado para enviar um pedido de cancelamento

Parâmetro para Pthread_cancel:

O parâmetro usado é obrigatório para ser inserido para cancelar a solicitação.

Sintaxe:

>> int pthread_cancel (pthread_t threadName);

pthread_detach:

Este é o método usado para separar um tópico. Não precisa de nenhum tópico para entrar no término. Todos os recursos em execução no tópico são liberados assim que o tópico for destacado.

Parâmetro de pthread_detachr:

É o parâmetro que aceita o ID do encadeamento de parâmetro obrigatório. É uma obrigação para ser desapegado.

Sintaxe:

>> int pThread_detach (thread pthread_t);

Código de amostra:

Aqui está um código de exemplo para mostrar a implementação da função descrita acima. Usamos um compilador GCC para compilar essas funções.

// Programa para mostrar as funções do tópico
#incluir
#incluir
#incluir
// chamando o thread Posix, um must-have em sistemas Unix/Linux
pthread_t tid [2];
função void *(void *arg)

não assinado long i = 0;
pthread_t id = pthread_self ();
if (pthread_equal (id, tid [0]))
// condição para fios sendo iguais

printf ("\ n primeiro thread está sendo processado \ n");

outro

printf ("\ n Segundo thread está sendo processado \ n");

// tópicos sendo processados.
para (i = 0; i<(0x255);i++);
retornar nulo;

int main (vazio)

int i = 0;
em terror;
// Criando um novo tópico
enquanto eu < 2)

erro = pthread_create (& (tid [i]), null, & function, null);
if (erro != 0)
printf ("\ n não conseguiu criar o thread: [%s]", strerror (erro));
outro
printf ("\ n thread foi criado com sucesso \ n");
// Tópico criado com sucesso
i ++;

sono (5);
retornar 0;

O código está escrito em um editor de texto; Você pode usar qualquer editor com base em sua escolha. Em seguida, salve -o em seu local favorito.

O arquivo é salvo no sistema de computador e depois é acessado. O arquivo salvo por nós foi nomeado teste.c. Para acessá -lo, digite o seguinte comando na janela do terminal:

$ sudo gcc teste.c -lpThread

Em seguida, para executar a saída, digite o seguinte comando:

$ ./a.fora

Saída esperada:

A saída que obtemos em resposta ao código anterior é mostrada abaixo:

Conclusão:

O tutorial abrangeu o processo básico de criação de threads e discutiu todos os métodos comumente usados ​​em sua criação. Thread é uma instância de um processo. Em seguida, orientamos os usuários pelos famosos parâmetros usados ​​por cada processo junto com as sintaxes para que eles possam usá -los em seus programas de computador. Aqui também compartilhamos um código de exemplo como uma amostra para entender melhor a idéia de criar um programa C em Posix. O compilador que usamos foi o GCC no sistema Linux. Os usuários também podem optar por qualquer outro compilador com base em sua preferência.