pthread_cond_signal()
e que imediatamente a seguir
o thread B executa a função pthread_cond_wait()
sobre a mesma variável de condição. Para cada um dos seguintes
cenários:
pthread_cond_signal()
desbloqueou o thread C que estava bloqueado nessa variável de condição;
pthread_cond_signal()
não desbloqueou qualquer thread bloqueado nessa variável de condição.
pthread_cond_wait()
pelo segundo thread? Justifique.
pthread_cond_wait()/pthread_cond_signal()
são muito parecidas com as primitivas sleep()/wakeup()
usadas na ilustração do problema do lost-wakeup nas aulas teóricas. Por que razão as primitivas de pthread_cond_t
não causam o mesmo problema? Os seus programas deverão usar a biblioteca libpthread
. Não se esqueça de indicá-lo ao compilador, i.e. especificar -lpthread
na linha de comandos.
Deverá ainda definir a variável _REENTRANT
na linha de comandos do
gcc
, usando o argumento -D_REENTRANT
, para garantir que
o compilador usa as funções apropriadas da biblioteca C.
Por outras palavras, invoque o compilador de C da seguinte maneira:
gcc -D_REENTRANT -lpthread
bbuf_t
e as funções
enter()
e remove()
para usar variáveis de condição.Sugestão: Modifique a sua solução para o problema 2 da folha5. Seja muito cuidadoso, doutro modo pode introduzir bugs muito difíceis de detectar.
IMP Use a função check()
para detectar se o
bounded buffer é corrompido devido a race conditions.
This document was translated from LATEX by HEVEA.