Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
so:leitores_escritores [2010/04/23 16:48] mazieroso:leitores_escritores [2010/04/23 16:48] (atual) maziero
Linha 1: Linha 1:
 +====== Leitores e Escritores ======
  
 +Este projeto consiste em usar threads e **semáforos** <del>**variáveis de condição**</del> POSIX para contruir um sistema leitores/escritores.
 +
 +===== Problema =====
 +
 +Construa um sistema com threads que acessam de forma concorrente uma fila de valores inteiros. Nesse sistema existem dois tipos de threads:
 +
 +  * **Leitora**: que percorre a fila e imprime na tela seu conteúdo e a média dos valores encontrados;
 +  * **Escritora**: que modifica o conteúdo da fila, removendo um elemento do início da fila e acrescentando um elemento no seu final.
 +
 +Observe que não há condição de disputa quando somente threads leitoras  acessam a fila, pois as leituras não a modificam e podem ser simultâneas. Os acessos simultâneos permitem um maior desempenho em leitura. No entanto, uma thread escritora deve ter acesso exclusivo à fila para fazer suas modificações, sem acessos concorrentes de outras threads, sejam leitoras ou escritoras, para evitar condições de disputa.
 +
 +===== Observações =====
 +
 +Existem três tipos de soluções para esse problema de sincronização:
 +
 +  * **Priorização dos leitores**: sempre que um leitor quiser ler e não houver escritor escrevendo (pode haver escritor esperando), ele tem acesso à fila. Nesta solução, um escritor pode ter de esperar indefinidamente (inanição, ou //starvation//), pois novos leitores sempre chegam.
 +  * **Priorização dos escritores**: quando um escritor desejar escrever, mais nenhum leitor pode fazer leituras enquanto o escritor não for atendido. Nesta solução, um leitor pode ter de esperar indefinidamente (inanição), pois novos escritores sempre chegam.
 +  * **Prioridades iguais**: não há risco de inanição, pois leitores e escritores têm as mesmas chances de acesso à fila; pode haver uma queda de desempenho em relação às soluções anteriores.
 +
 +
 +===== A entregar =====
 +
 +Você deve pesquisar as três soluções e implementá-las, usando como estrutura de dados a fila de inteiros implementada nos projetos anteriores, threads Posix e semáforos <del>variáveis de condição</del> Posix. Não serão aceitas soluções empregando espera ocupada (//busy-wait//). Em sua implementação, use três threads leitoras (que percorrem a fila) e duas escritoras (que inserem e removem elementos da fila).
 +
 +Devem ser entregues os arquivos C com as soluções implementadas separadamente, sem esquecer de identificar o(s) autor(es).