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

Re: dormindo threads






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>