Ferramentas do usuário

Ferramentas do site


so:operador_join

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

so/operador_join.txt · Última modificação: 2019/04/22 09:23 por maziero