[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: "Danilo Matheus Rubio Conde" <danconde@linux.ime.usp.br>
- Date: Fri, 10 May 2002 19:31:03 -0000
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>