Uso de threads no C

Publicado por Rafael Siqueira Telles Vieira 20/06/2007

[ Hits: 39.535 ]

Homepage: http://www.lia.ufc.br/~rafaelstv/

Download threads.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

  



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);
}

Scripts recomendados

Um parser para tratar opções passadas para um programa em C

[C] Qsort - Ordenação

Lista encadeada

Método eficiente de armazenamento utilizando containers (Vector e Map)

Fila


  

Comentários
[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?

[6] Comentário enviado por rafastv em 15/01/2008 - 17:48h

man pthread_attr_init

ou, se você não possuir a documentação instalada:

http://www.opengroup.org/onlinepubs/007908799/xsh/pthread_attr_init.html

Boa sorte,

[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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts