Exámen diciembre 2013 - ej 3 duda sobre solución

Exámen diciembre 2013 - ej 3 duda sobre solución

de Santiago Ignacio Hitta Monteverde -
Número de respuestas: 2

Buenas, me surgió una duda analizando la solución de este ejercicio, la cual a mi parecer tiene una pequeña falla... y eso es lo que me preocupa ya que lo más probable es que yo haya entendido algo mal o que tenga conceptos errados.

http://www.fing.edu.uy/inco/cursos/sistoper/examenes/2013/Sol2013DIC.pdf

A mi entender el proceso Ventanilla, para cada uno de los casos posibles (atiende a uno que viene a iniciar el trámite, o atiende a uno que viene a finalizarlo), debería recibir un mensaje por parte del funcionario involucrado avisandole que el mismo(el funcionario) ya retiró(vació los mailboxes) toda la información que le fue enviada. De no ser asi, podría suceder (y creo que sucede en la solución presentada) que un funcionario obtenga la clave de otro, que si no me equivoco sucede en el siguiente caso de uso:

1)Un funcionario nuevo avisa que requiere atención : "mb_requiero_atencion.send(NIL)"

2)La ventanilla despierta y le dice que pase:

"mb_requiero_atencion.receive()"

"mb_espero_atencion.send(NIL)"

3)La ventanilla espera a que le den la cedula y la recibe:

"mb_funcionario_cedula.receive(cedula)"
 
4)La cedula resulta ser válida asi que la ventanilla registra el funcionario y le envía la respuesta correspondiente:
if(validar_pertenencia(cedula))
{
registrar_usuario(cedula);
mb_ventanilla_resp.send(true,generar_clave_activacion());
}
 
5)El proceso funcionario por alguna razón se demora en ejecutar el Receive, con lo cual su clave de activación queda en el mailbox durante unos instantes.
 
6)Durante esos instantes viene un nuevo funcionario y se repite el mismo ciclo, salvo que esta vez, el funcionario ejecuta rápidamente el receive, llevandose la clave del otro funcionario "lento".


Mi duda: efectivamente hay un error en la solución que no consideró ese caso de borde o yo estoy entendiendo mal la solución(eso es lo que a mi me preocupa).


Agradezco cualquier ayuda!
En respuesta a Santiago Ignacio Hitta Monteverde

Re: Exámen diciembre 2013 - ej 3 duda sobre solución

de Jorge Merlino -

Si, está mal la solución. Siempre que se hace un send y luego un receive en mailboxes no exclusivos del proceso hay que mutuexcluir esas dos sentencias para que no pase lo que vos decís. En el caso del retorno de la cédula si estaba contemplado con el uso de mb_listo. Ya está corregida la solución.