Ir ao conteúdo
  • Cadastre-se
rjort_nine

Sobre Threads e a lib Pthread

Recommended Posts

Iniciei os estudos sobre threads na linguagem C, e me surgio uma duvida refente ao tipo de função que é criada... por exemplo:

void *uma_thread_aqui (void *argumentos) {}

o que significa essa função do tipo ponteiro??? eu queria entender o funcionamento real dela... ficou algo muito abstrato... ou eu sou muito burru mesmo xD

obrigado desde já! =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função retorna um ponteiro, ou seja, ela retorna uma direção a algum conteúdo que foi criado dinamicamente, ou retorna a direção de uma variável que está fora dela mesma. De uma olhada nesse exemplo:
 

#include<stdio.h>
#include <stdlib.h>

void *reservaDinamica( int n, int tipo) {
    
    void *ptr = malloc( n*tipo );
    
    return ptr;    
}

int main () {
    
    int *vetor = (int*)reservaDinamica(10, 4);
    
    vetor[0]= 10;
    vetor[9]= 100;
    
    printf("%d\n", vetor[0]);
    printf("%d\n", vetor[9]);
    
    free(vetor);
    return 0;
}

Imagine uma função que reserve um vetor de n casinhas, e que ademais de n casinhas seja uma função de reserva de memória para qualquer tipo de variável.Imagine que uma vez reservado a memória ela retorne a direção. Se eu quiser reservar um int dinamicamente por exemplo, eu teria que informar para malloc que quero reservar 4 bytes, mas no meu caso eu quero reservar 10 vezes 4 bytes(10*4) já que se trata de um vetor, isso é o que quer dizer os parâmetros dessa função que passei como exemplo, o primeiro parâmetro é a quantidade de casinhas multiplicado pelo numero de bytes que é o segundo parâmetro.

Eu poderia invocar essa função dessa maneira:
int *vetor = (int*)reservaDinamica(10, sizeof(int));

Se fosse float:
float *vetor = (float*)reservaDinamica(10, sizeof(float));

Obviamente como é uma função genérica, serve para reservar todos os tipos de dados. Ao retornar o valor é preciso fazer um cast ao tipo correto pois ela retorna void*, se o vetor que me interessa é int* eu preciso converter a int*. Isso é a mesma coisa que faz malloc, por isso precisamos fazer um cast sempre que usamos malloc, essa função retorna um ponteiro genérico tipo void* igual que nossa função.

Deu para entender mais ou menos?

As variáveis reservadas com malloc resistem a todos os escopos... ela vai existir até que seja liberada, por isso se receber essa variável pelo return certifique-se que não está obrigado a libera-la.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×