programação concorrente
ESCOLA DE ENGENHARIA
DEPARTAMENTO DE ENGENHARIA ELETRÔNICA
AUTOMAÇÃO EM TEMPO REAL
PROFESSOR: Constantino Seixas Filho
LISTA I (com consulta)
1) [20 pontos] Problema do buffer circular revisitado
Modifique a solução do problema dos buffers circulares apresentado no capítulo 3 para a seguinte situação: Existe 1 produtor e n consumidores. Cada mensagem depositada pelo produtor deve ser consumida por todos os n consumidores. O slot só será liberado quando todos os consumidores efetuarem sua leitura. Cada consumidor irá receber as mensagens na ordem em que forem depositadas. Diferentes consumidores podem receber as mensagem em tempos diferentes. Um consumidor rápido estará recebendo mensagens muito antes de um consumidor mais lento. Desenvolva o programa em pseudo linguagem.
2) [10 pontos] Questão de tempo ...
Uma thread espera por um evento (EvAtivação). Quando o evento acontece ela deve emitir um pulso de 140 ms ativando a variável BOOL bSet, inicialmente em 0. Após receber um evento EvTerminar a thread deve sair do loop e terminar. Programe a aplicação usando o conjunto de instruções do WNT.
Temporize utilizando Waitable Timers.
3) [10 pontos] Responda à seguinte pergunta:
Duas threads estão sincronizadas através de diretivas de sincronização:
Thread 1:
Executa uma tarefa e avisa à thread 2 que terminou. Em seguida fica a espera de uma nova tarefa.
SetEvent(hEventWorkerThreadDone);
WaitForSingleObject(hEventMoreWorkToBeDone, INFINITE);
Thread 2:
Espera que uma tarefa seja executada e em seguida solicita que outra atividade seja realizada.
WaitForSingleObject(hEventWorkerThreadDone, INFINITE);
PulseEvent(hEventMoreWorkToBeDone);
O procedimento acima é inseguro. Por que ?
A instrução abaixo pode ajudar em algo ? Mostre como.
DWORD SignalObjectAndWait(
HANDLE hObjectToSignal, // Mutex, Semaphore ou Event
HANDLE hObjectToWaitOn, // Mutex, Semphore, Event, Timer, Process,
//