Operador Join
O objetivo deste projeto é construir uma função de sincronização denominada task_join
, que permite que uma tarefa espere a conclusão de outra tarefa, de forma similar à chamada POSIX pthread_join
:
int task_join (task_t *task)
A chamada task_join(b)
faz com que a tarefa atual (corrente) seja suspensa até a conclusão da tarefa b
. Quando a tarefa b
executar a chamada task_exit
, a tarefa suspensa deve ser colocada de volta na fila de tarefas prontas, para retomar sua execução. Caso a tarefa b
não exista ou já tenha encerrado, esta chamada deve retornar imediatamente, sem suspender a tarefa corrente. Lembre-se que várias tarefas podem ficar aguardando que a tarefa b
finalize, e todas têm de ser acordadas quando isso ocorrer.
O valor de retorno da chamada task_join
deve ser o código de encerramento da tarefa b
(valor exit_code
informado como parâmetro de task_exit
), ou -1, caso a tarefa indicada não exista.
Sua implementação deverá funcionar com este código e gerar uma saída similar a este exemplo.
Use o controle de preempção para evitar condições de disputa nas variáveis envolvidas.
Outras informações
- Duração estimada: 4 horas.
- Dependências: