Pular para o conteúdo

Uso de threads no C

Um exemplo simples do uso de threads no C.

Basicamente crio threads passando como argumento das mesmas seu id e um tempo de espera que é sorteado por meio de um rand. Espero que ajude um pouco na compreensão do que são threads.

Para compilar: gcc threads.c -lpthread
Rafael rafastv
Hits: 41.629 Categoria: C/C++ Subcategoria: Metodologias
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Um exemplo simples do uso de threads no C.

Basicamente crio threads passando como argumento das mesmas seu id e um tempo de espera que é sorteado por meio de um rand. Espero que ajude um pouco na compreensão do que são threads.

Para compilar: gcc threads.c -lpthread
Download threads.c Enviar nova versão

Esconder código-fonte

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

#include <pthread.h>

struct valor{
   int tempo;
   int id;
};

void *espera(void *tmp){
   struct valor *v = (struct valor *) tmp;
   sleep(v->tempo);
   printf("Oi eu sou a thread %d esperei %d segundos antes de executar\n",v->id,v->tempo);
}

int main(){

   pthread_t linhas[10];
   int execute,i;
   struct valor *v;
   srand(time(NULL));
   for (i=0;i<10;i++){
      v = (struct valor *) malloc(sizeof(struct valor *));
      v->tempo = (rand()%10)+2;
      v->id = i;
      printf("Criei a thread <%d> com tempo <%d>\n",i,v->tempo);
      execute = pthread_create(&linhas[i],NULL,espera,(void *)v);
   }
   pthread_exit(NULL);
}

[C] Qsort - Ordenação

Lista Circular

Métodos de Ordenação - Radix Sort

Deep First Search

Heap Sort em C

#1 Comentário enviado por rafastv em 20/06/2007 - 16:13h
[ATENÇÂO]
Caso dê erro no momento de criar o binário inclua a seguinte linha
#include <time.h>
no código fonte
[ATENÇÂO]
#2 Comentário enviado por glaudiston em 14/01/2008 - 16:30h
bem legal...

foi muito útil pra mim.

Vlw
#3 Comentário enviado por glaudiston em 14/01/2008 - 16:37h
mas pra q q serve o NULL q vc passou como 2o parametro ?
#4 Comentário enviado por rafastv em 14/01/2008 - 23:57h
O 2° parametro pode ser usado para controlar atributos de uma thread específica, como regras de escalonamento e prioridade. Estes atributos são controlados por um pthread_attr_init normalmente, contudo, se isto não lhe interessa ou não é necessário para seu programa, o NULL resolve.
#5 Comentário enviado por glaudiston em 15/01/2008 - 09:08h
Obrigado...

Mas olhei a documentação do pthread_create e não achei a listagem destes atributos possíveis e seus significados, você sabe onde posso encontrar isto?
#7 Comentário enviado por MoisesUNI-BH em 01/06/2008 - 10:29h
Estou tendo problemas com uma thread no meu programa... tô apaiando pra fazer um chat em C usando sockets TCP... trabalho é para segunda... tá osso...

Pois bem... eu criei uma thread que vai ficar rodando um "servidozinho" do cliente na porta 55333 para que outro cliente possa conectar, ou seja, o chat que tô lutando pra fazer tem um servidor que vai gerenciar quem está logado, fornecendo a lista de clientes logados, e o cliente vai ser um "cliente e servidor"!!! Só que, depois que eu disparo a thread, teoricamente, ela tem que ficar em paralelo e meu programa vai continuar executando as proximas linhas, mas a porcaria aki tá parando na thread!!! É assim mesmo? :(

Moises Ramos.
#8 Comentário enviado por daniSilva25 em 07/03/2017 - 16:10h
Gostei do post, mas queria saber como criar 10 threads e depois criar um laço de repetição executando as threads 50 vezes

Contribuir com comentário

Entre na sua conta para comentar.