Practico 6 Ejercicio 3

Practico 6 Ejercicio 3

de Giuliano Severi Hugli -
Número de respuestas: 8

Hola, este ejercicio dice que un auto tiene que elegir la caja con menos autos en cola. Lo que se me ocurrió fue hacer un procedimiento auxiliar Admin, y un mailbox Admin_Auto, donde el Admin le envía al procedimiento Auto el número de caja con menos autos.
Las cajas las modele como un array de mailboxes de 0 a n-1 donde los autos realizan un Send con su número de tarjeta. Tengo la duda de como hacer para saber cuantos mensajes hay en un mailbox, por ejemplo si quiero saber cuantos autos hay en la cola 3, quisiera saber cuantos mensajes (números de tarjeta) hay en el mailbox cajas[3]. Se entiende? 


Gracias!

En respuesta a Giuliano Severi Hugli

Re: Practico 6 Ejercicio 3

de Mauricio Irace Perez -

Buenas,

Yo justo quería preguntar por la correctitud de un algoritmo para resolver el ejercicio sin conocer la cantidad de autos en cada cola, y si no es molestia pregunto acá para no crear otro topic y generar baja cohesión y alto acoplamiento en los foros.

La idea es llenar linealmente cada fila en las colas (suponiendo están dispuestas en forma de columna).

Para esto, solo bastaría llevar un contador i := 0..n-1, y cada vez que tengo que agregar un auto, lo meto en la caja i, y luego hago
i := i+1 mod n, de esta forma, al llamar m veces el algoritmo, elige siempre la próxima de las  - m mod n cajas con menos autos, y la diferencia seria de como mucho 1 auto.

esta bien esto?

Desde ya muchas gracias, y disculpen que me entrometa



En respuesta a Mauricio Irace Perez

Re: Practico 6 Ejercicio 3

de Jorge Merlino -

Eso solo funciona si el trámite en la caja le lleva exactamente el mismo tiempo a todo el mundo pero no hay ninguna garantía de eso. Podrías tenes un cajero lento que demora más que los otros y con ese algoritmo ese tendría una cola más larga que los demás. Lo mismo si te toca un cliente lento que demora en buscar la tarjeta.

En respuesta a Giuliano Severi Hugli

Re: Practico 6 Ejercicio 3

de Sebastian Passaro Pereira -

Yo usé la primitiva STATUS que vimos en teórico que dice cuántos mensajes tiene el Mailbox. Recorrí un arreglo de Mailbox preguntando si cada uno era más chico que el mínimo, y ese devolvía.

En respuesta a Giuliano Severi Hugli

Re: Practico 6 Ejercicio 3

de Jorge Merlino -

Es correcta la idea de hacer un administrador que sepa cuanta gente hay en cada caja. Este administrador puede llevar una cuenta de cuantos clientes mandó a cada caja sin precisar ninguna función especial del mailbox. Claro que los clientes deberían avisarle cuando se van.

Me parece que con un solo mailbox por caja como parece que lo hiciste no se puede resolver.

En respuesta a Jorge Merlino

Re: Practico 6 Ejercicio 3

de Matias Cadepont Burgos -

Buenoos días, quería consultar si esta solución que adjunto es correcta.

Gracias.

Saludos.

En respuesta a Matias Cadepont Burgos

Re: Practico 6 Ejercicio 3

de Andres Bello Ureta -

Matías, corregime si me equivoco, pero creo que tu solución tiene los siguientes detalles:

-Para que el auto obtenga en número de caja utilizas el administrador. Para que el administrador le mande el número a quien se lo pidió haces SEND(mc + numTarjeta) pero numTarjeta puede ser cualquier número por lo que tendrías que definir muchisimos mailbox (mc0, mc1, mc2,mc3....). Para solucionar esto se me ocurrió que el administrador avise cuando este listo y luego espere a que un auto le solicite una caja. Si llega un segundo auto sin que el primero haya sido atendido se va a quedar trancado en el RECEIVE(administrador_listo)

-Lo mismo te pasa con el auto-cajero.


En respuesta a Andres Bello Ureta

Re: Practico 6 Ejercicio 3

de Matias Cadepont Burgos -
Si, lo consulte el otro día en el práctico y lo que me respondieron fue lo siguiente.
Cuando tenes cosas que en principio la cantidad podría ser infinita, hay dos enfoques, uno es el que yo utilicé, es decir, un mailbox "individual" para cada auto, pero que no es lo deseable.
Sino que lo más correcto sería utilizar tanto en el administrador como en la caja, un mailbox al estilo mutex, de esa manera, si bien se está serializando el acceso a la caja y  al administrador, se puede utilizar un único mailbox para comunicarse con todos los autos, ya que al estar "serializado" solo un auto por vez va a poder estar esperando el receive.
Es decir, en este ejemplo habría un mailbox del tipo mutex para el administrador y uno del tipo mutex para cada una de las 20 cajas, y a su vez, un mailbox para la comunicación desde el administrador hacia los autos, y uno por caja para la comunicación desde cada caja a los autos.

No se si se entiende la idea.