[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