[Pr�via] [Pr�xima] [Pr�via por assunto] [Pr�xima por assunto]
[�ndice cronol�gico]
[�ndice de assunto]
Re: Duvida no EP2 - funcao sleep()
- Subject: Re: Duvida no EP2 - funcao sleep()
- From: Francisco Reverbel <reverbel at ime.usp.br>
- Date: Thu, 2 May 2002 08:46:03 -0300 (EST)
On Tue, 30 Apr 2002, Rodrigo Mendes Leme wrote:
> Prof. Reverbel,
>
> Gostariamos de saber se existe uma funcao analoga a sleep() para
> threads.
> O problema com sleep() eh que ele interrompe o processo todo, mas
> nos so queremos parar uma thread.
>
> Atenciosamente,
> Leonardo e Rodrigo
N�o existe... E voc�s tem raz�o quanto ao sleep(), ele n�o deve ser
usado. Vamos ter que usar pthread_cond_timedwait(), o que � bem
esquisito neste caso, mas funciona.
Definam uma condition variable dummy, que _nunca_ ser� sinalizada,
e um mutex _por_thread_ que precisar de um "thread sleep":
pthread_cont_t dummy = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex_da_thread = PTHREAD_MUTEX_INITIALIZER;
Quando quiser que uma thread durma, preencha uma struc timespec tempo
com o tempo at� ela acordar e diga:
pthread_mutex_lock(&mutex_da_thread);
pthread_cond_timedwait(&dummy, &mutex_da_thread, &tempo);
Como ning�em d� signal na vari�vel de condi��o dummy, a thread s�
acorda quando o tempo especificado passar. A fun��o
pthread_cond_timedwait() espera receber como segundo par�metro
um mutex travado, o qual ser� destravado por ela. Essa � a raz�o
da chamada pthread_mutex_lock() antes da pthread_cond_timedwait().
Reverbel