Práctico 6 [Ejercicio 2]

Práctico 6 [Ejercicio 2]

de Jairo Yamil Bonanata Silva -
Número de respuestas: 3

Hola,

No sé como hacer con el tema de las primitivas de envío de mensaje de nombrado explícito. Utilizando implícito simplemente el primero que llega hace un receive y pasa, el otro como no hay mensaje se tranca, luego al salir de la sección crítica envío un mensaje para destrancar otro.

Saludos,
Jairo.

En respuesta a Jairo Yamil Bonanata Silva

Re: Práctico 6 [Ejercicio 2]

de Aldo Martin Plazzotta Aguilera -

SI no entiendo mal, vos queres decir que el proceso que está saliendo de la sección crítica no sabe a quien debe hacer el send. 

Supongamos que un proceso P1 esta saliedno de la sección, podría ocurrir que otro proceso p2 esté esperando para entrar a la seccion. En este caso P1 debería enviarle el "permiso" a P2, ¿pero como haria P1 para enterarse a quien debe mandar?

También podría pasar que cuando P1 está saliendo, nadie más está esperando. En este caso P1 debería avisar a alguien más, un proceso auxiliar que se encargué de recibir solicitudes y enviar los permiso de entrada a la sección. 

Saludos   


En respuesta a Aldo Martin Plazzotta Aguilera

Re: Práctico 6 [Ejercicio 2]

de Aldo Martin Plazzotta Aguilera -

Gente! Comparto mi solución para la parte A) de este problema. Explico lo que hice:

Cada proceso P tiene un id mayor que 0. Un proceso auxiliar AUX administra el permiso para acceder a la sección crítica. 

Cada proceso P envía a AUX su id cuando quiere ingresar a la sección, y luego hace un receive esperando el permiso. AUX le otorga permiso enviandole NULL. Luego de que P recibe y pasa por la sección, envía a AUX el valor 0 avisando que salió de la sección crítica.

AUX por su parte mantiene una cola de identificadores y un booleano "usando" que se pone en true si la seccion está siendo usada por algún proceso. 

AUX repite el siguiente Loop: recibe un numero. Si es un id es porque alguien quiere entrar a la sección. En ese caso, si no hay nadie en la sección, le envía NULL al proceso, sino pone el id en la cola.

Si en cambio AUX recibe 0, es porque alguien salió de la sección. En ese caso, si hay algún id en la cola le envía permiso al proceso de ese id. Sino pone usando en false.

Quedó atento a cualquier crítica o aporte. Dejo planteadas dos preguntas: 

1) Yo usé una estrutura de tipo Cola en el proceso AUX, ¿podemos hacer esto? Me refiero a usar estructuras de datos como Cola o Lista, así como sus operaciones (cola.is_empty(), por ejemplo) 

2) Yo supuse que los mensajes son de tipo Integer. En este caso, ¿enviar el valor NULL es lo mismo que enviar el valor 0?.

Saludos.