Helder Brito Nascimento Renato Luiz Cunha Guilherme Monteiro Garcia Luiz Rodrigo Castro Uanderson Sigler Gomes
Inicialmente,os Eliminadores sao criados e marcam suas intencoes de eliminar na lista. Como a lista esta vazia,eles ficam bloqueados esperando inseridor inserir uma quantidade "NUM_INSERE" de Nos na lista para poderem ter acesso exclusivo a lista. Em seguida sao criados os Buscadores, que verificam se existem eliminadores tentando eliminar ou eliminando um No na lista. Se existirem, eles ficam bloqueados ate que nao exista mais processos eliminadores tentando acessar a lista pois eles tem menos prioridades do que os Eliminadores. Apos isto, os Inseridores são criados, inserem "NUM_INSERE" Nos na lista e acordam os Eliminadores bloqueados.
Como os Eliminadores devem ter exclusao mutua entre todos os processos, damos a maior prioridade a eles para que nao fiquem em Starvation.Toda vez que a lista e nula ou nao existe intensao em eliminar mais um No da lista, os Eliminadores acordam os inseridores. Estes, por sua vez, cada vez que inserem 1 No na lista acordam um processo bloqueado do tipo Inseridor ou Buscador e idem para o Buscador. Porem, os Eliminadores so voltam a eliminar a lista apos serem inseridos mais "NUM_INSERE" nos na lista, quando serao acordados pelos Inseridores, evitando tambem starvation de algum processo do tipo Inseridor.Os buscadores dificilmente estarao em Starvation pois poderao rodar em paralelo com os inseridores,alem de nao possuirem exclusao mutua no acesso a lista.Depois de acordar os Eliminadores, Buscadores e Inseridores irao automaticamente se bloquearem a espera de que nao haja mais intencao dos eliminadores acessarem a lista.
Para rodar a solucao, execute ./lista dentro do diretorio onde foi descompactada nossa solucao. Instrucoes de execucao aparecerao na tela. Boa sorte!
1.4.0