En la solución dada para Votante no se podrían intercalar dos votantes y uno obtener la validación de la credencial del otro. No faltaría definir un mailbox extra mutex para que esto no suceda.
Solución dada:
procedure
Votante
mb_requiero_atencion.send(NIL);
mb_espero_atencion.receive();
mb_mutex.receive(); //no faltaría este mailbox
mb_votante_credencial.send(mi_crecencial());
mb_sobre.receive({Resultado,
Sobre, Credencial});
mb_mutex.send(NIL);
if(Resultado ==
VALIDA)
{
mb_cuartos.receive(NroCuarto);
elegir_voto(Sobre,
NroCuarto);
mb_cuartos.send(NroCuarto);
mb_fila_tirilla.receive(CantEsperaTirilla);
mb_fila_tirilla.send(CantEsperaTirilla +
1); // Quiero entregar
tirilla
mb_requiero_atencion.send(NIL);
mb_quiero_poner_sobre.receive();
// Espero atención de la mesa
Tirilla
= sacar_tirilla(Sobre);
mb_tirilla.send(Tirilla);
mb_credencial.receive(Credencial);
depositar_voto(Sobre);
}
end procedure;