[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: dormindo threads
- Subject: Re: dormindo threads
- From: Fabio Silva Dias <fdias@ime.usp.br>
- Date: Fri, 10 May 2002 16:52:46 -0300
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>