-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Nº Máximo de Lugares #42
Conversation
a formula pode ser ceil(nplaces/32) |
Este extrato é retirado duma parte final do programa. Ele tem muito IWANT RECVD juntos sem um ENTER a seguir porque fica no estado de procurar lugar então não consegue dar uma resposta imediata, mas assim que pode dar uma resposta de ENTER (que tem um TIMUP atrás) o IAMIN é imediato, ou seja, sempre está a entrar só uma thread na secção critica de cada vez. Nice O problema que está a dar agora é isto:
No programa dos clientes algumas threads não esperam o tempo suficiente e isso faz com que o programa quebre. Vou tentar tratar disto, pondo as threads a esperar como tempo máximo o tempo máximo de uso de um lugar. |
Alright, tendo agora na parte de leitura do fifo privado um usleep() a ter em conta o tempo maximo de uso (faz 5 tentativas de leitura, espera TIMEMAX/5 ms entre cada para no fim ter feito todas as tentativas e na ultima tem de haver 1 lugar livre caso o lugar ocupado tenha o usado durante o tempo maximo possivel). |
Vou começar a tratar do README para ter isto despachado.
|
Com estas últimas mudanças passou a todos os testes e em geral parece bem, posso dar merge? |
Attempt nº1:
Arranjar formula que retorne o tamanho do array dado o nº de lugares.
Na verificação de lugar verifica os lugares até nplaces
pôe variavel global a 1 a simbolizar que está à frente na lista de espera e espera até ter lugar livreNas outras threads que não encontrem lugar primeiro verificam a var global, se estiver a 1 esperam, se estiver a 0 pôem a 1 e procuram lugarActually, para verificar se tem lugar o programa está a usar mutexes: Podemos fazer com que fique sempre à procura de lugar dentro da secção critica do mutex caso não tenha um lugar disponivel na primeira passagem:
Assim outras threads têm de esperar que o mutex esteja desbloqueado para poderem verificar.
ERRO POSSIVEL : Assim que desbloqueia o mutex e estiver mais do que uma thread à espera não sei se entra uma e dá logo lock ou se pode entrar mais do que uma, vou testar e ver
Attempt 2
mudar para struct e fazer o que está no issue #42
Após estar a funcionar:
Usou-se a primeiro opção e tivemos a sorte de após um mutex dar unlock só uma thread é que entra