Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior | |||
so:operador_barreira [2023/03/29 19:12] – maziero | so:operador_barreira [2023/05/25 19:11] (atual) – [Inicializa uma barreira] maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Operador Barreira ====== | ||
+ | |||
+ | O objetivo deste projeto é construir uma primitiva de sincronização entre threads denominada " | ||
+ | |||
+ | O comportamento de uma barreira é bem simples: a barreira deve ser inicializada com um valor N > 0. A partir desse momento, cada thread que " | ||
+ | |||
+ | {{ barrier.png |}} | ||
+ | |||
+ | As funções a implementar são indicadas a seguir. | ||
+ | |||
+ | ==== Inicializa uma barreira ==== | ||
+ | |||
+ | <code c> | ||
+ | int barrier_init (barrier_t *b, int N) | ||
+ | </ | ||
+ | |||
+ | Inicializa uma barreira indicada por '' | ||
+ | |||
+ | ==== Chega a uma barreira ==== | ||
+ | |||
+ | <code c> | ||
+ | int barrier_join (barrier_t *b) | ||
+ | </ | ||
+ | |||
+ | Permite a uma tarefa indicar que chegou à barreira representada por '' | ||
+ | |||
+ | ==== Destrói uma barreira ==== | ||
+ | |||
+ | <code c> | ||
+ | int barrier_destroy (barrier_t *b) | ||
+ | </ | ||
+ | |||
+ | Destrói a barreira indicada por '' | ||
+ | |||
+ | ===== Observações ===== | ||
+ | |||
+ | Sua implementação deverá funcionar com {{pingpong-barrier.c|este código}} e gerar uma saida similar a {{pingpong-barrier.txt|este exemplo}}. Este projeto faz uso da chamada '' | ||
+ | |||
+ | Use os semáforos anteriormente implementados ou o controle de preempções para evitar condições de disputa envolvendo as variáveis internas da barreira. | ||
+ | |||
+ | ===== Outras informações ===== | ||
+ | |||
+ | * Duração estimada: 4 horas. | ||
+ | * Dependências: | ||
+ | * [[Gestão de Tarefas]] | ||
+ | * [[Dispatcher]] | ||
+ | * [[Preempção por Tempo]] | ||
+ | * [[Tarefa Main]] | ||
+ | * [[Tarefas suspensas]] | ||
+ | * [[Tarefas dormindo]] | ||
+ | * [[Semáforos]] | ||