Ir ao conteúdo
  • Cadastre-se

Sobre Threads e a lib Pthread


reuter_rjort

Posts recomendados

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

Link para o comentário
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.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...