[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: dormindo threads



Realmente, ao menos no meu micro o sleep fez apenas a thread que a
chamou esperar...
Alguem sabe como tirar o warning que o compilador faz quando compila o
programa com um void * sem retornar nada?

Fabio

Danilo Matheus Rubio Conde wrote:
> 
> Ola,
> 
>         Estive fazendo alguns testes aqui com as funcoes sleep(secs) e
> usleep(usecs) e cheguei a resultados que me levam a conclusoes
> estranhas, levando em consideracao que jah foi dito nesta lista que a
> funcao sleep() trava todos os threads.
>         Meu teste: fiz um programinha bobo que cria dois threads. Um deles
> chama a funcao sleep() (ou usleep(), deu na mesma) e o outro fica
> imprimindo numeros feito louco, mesmo quando o outro thread estah
> esperando. O segundo thread soh para quando o primeiro muda o valor de
> uma variavel, apos esperar um tempo.
>         Minha conclusao: como o segundo thread fica imprimindo numeros sem
> parar, mesmo enquanto o outro estah esperando, as funcoes sleep() e
> usleep() fazem apenas o thread que a chamou esperar. Certo ?
>         O codigo fonte estah abaixo.
> 
>         Professor, estou certo ?
> 
> Danilo, confuso.
> 
> ###Codigo fonte#####
> 
> #include <pthread.h>
> #include <stdio.h>
> #include <stdlib.h>
> #include <semaphore.h>
> #include <unistd.h>
> 
> int vai;
> 
> void *bla () {
>   printf("antes 1\n"); fflush(stdout);
>   sleep(10);
>   vai = 1;
>   printf("depois 1\n"); fflush(stdout);
> }
> 
> void *ble () {
>   int z = 0;
>   printf("antes 2\n"); fflush(stdout);
>   while (!vai) printf ("%d\n", z++);
>   printf("depois 2\n"); fflush(stdout);
> 
> }
> 
> int main () {
> 
>   pthread_t t1, t2;
>   pthread_attr_t attr;
> 
>   pthread_attr_init(&attr);
>   pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
> 
>   vai = 0;
> 
>   pthread_create (&t1, &attr, bla, NULL);
>   pthread_create (&t2, &attr, ble, NULL);
>   pthread_join (t1, NULL);
>   pthread_join (t2, NULL);
> 
> }
> 
> ##############################
> 
> #### Saida ####
> antes 1
> antes 2
> milhares de numeros que o segundo thread imprime...
> depois 1
> depois 2
> 
> #############
> 
> Fabio Silva Dias <fdias@ime.usp.br> escreveu:
> 
> > > Eu nao sei como usar aquela struct timespec tempo. Acho que não
> está
> > > dando certo o que estou tentando. Como faço para, por exempo,
> atribuir 6
> > > segundos a um timespec &tempo?
> >
> > Não sei se devo passar para aquela função o tempo a partir de agora
> ou
> > agora + 6 segundos...
> > --
> >  Fabio Silva Dias   <fdias@linux.ime.usp.br>
> >
> 
> --
> Danilo Matheus Rubio Conde   <danconde@linux.ime.usp.br>

-- 
 Fabio Silva Dias   <fdias@linux.ime.usp.br>