Consulta Examen 28 de febrero de 2015

Consulta Examen 28 de febrero de 2015

de Matteo Guerrieri Garcia -
Número de respuestas: 3
Buenas,


En la letra del problema dice que la cantidad de jugadores no está acotada, sin embargo por cómo está hecha la solución, solo se permiten 5 jugadores ya que se hace 5 send en el main, verdad? 

Por otro lado, me surgen dudas más teóricas sobre maiboxes debido a que encaré la solución de otra manera:

Supongamos que tengo muchas instancias de Jugadores como dice la letra y un Servidor donde le mandan las jugadas, es correcto hacer algo así: 

procedure Jugador() {
  quiero_jugar.send(NULL);
  jugada = random();
  mtx.receive();
  jugadas.send(jugada);
}
procedure Servidor () {
  while (true) {
    quiero_jugar.receive();
    mtx.send(NULL);
    valor = jugadas.receive();
  }
}

Mis consultas son:

- Los send se "guardan"? Es decir si X procesos hacen send, despues voy a poder hacer X receive sobre ese mailbox sin bloquear ?
- En el caso de arriba, me estoy asegurando la mutua exclusión? No estoy seguro si esa es la forma correcta de hacer un mutex "casero" con mailboxes.


Gracias

En respuesta a Matteo Guerrieri Garcia

Re: Consulta Examen 28 de febrero de 2015

de Manuel Freire -

Buenas,

Te respondo las dudas de a una.

"...por como está hecha la solución, solo se permiten 5 jugadores ya que se hace 5 send en el main ¿verdad?"
No, no se permiten solo 5 sino que se permiten 5 a la vez. Esto viene de la letra "...El servidor recibirá las apuestas de los jugadores y cada cinco apuestas determina el o los ganadores y el monto a pagar..." Con lo que se refiere a la cantidad no acotada de jugadores es que pueden venir de a muchos y como cada cinco tenés que dar un resultado hay que pararlo de alguna forma.

"¿Los send se "guardan"? Es decir si X procesos hacen send, después ¿voy a poder hacer X receive sobre ese mailbox sin bloquear?"
Siempre que hables de mailboxes de tamaño infinito la respuesta es sí. En otro caso podria darse que el tamaño del mailbox sea el que acote la cantidad de receives . 

"En el caso de arriba ¿me estoy asegurando la mutua exclusión? No estoy seguro si esa es la forma correcta de hacer un mutex "casero" con mailboxes."
No puedo responderte mucho sin saber cómo están inicializados los dos mailboxes (cuántos send se les da en el main) pero (y esto es un apunte general que puede tener excepciones) no tiene mucho sentido hacer un mutex con mailboxes para acceder a mailboxes. Ellos ya garantizan la mutuoexclusión en sus primitivas. Si bien puede haber algún caso en lo que hagas algo parecido a un mutex generalmente lo mutuoexcluido es un recurso compartido que no está metido dentro de un mailbox.

Si me pasás como inicializaste te hago algún comentario más puntual de la solución.

Saludos!

En respuesta a Manuel Freire

Re: Consulta Examen 28 de febrero de 2015

de Matteo Guerrieri Garcia -

Gracias por la respuesta.

Respecto a la última, el mutex seria por si tengo varias instancias, donde le mandan todos a algo en común y tengo que mutuo excluir el "canal de comunicación" digamos, como se hace en el examen de 13 de febrero de 2019, donde se mutuo excluye la comunicación con la mesa de votación, porque en ese caso si se mutuo excluye?


mb_mutex.receive(); 
mb_identificador_mesa.send(documento); 
mb_espero_validacion.receive(ok);
mb_mutex.send(NIL); 
En respuesta a Matteo Guerrieri Garcia

Re: Consulta Examen 28 de febrero de 2015

de Manuel Freire -

Entendí por dónde vas pero fijate que lo que hacés no estás ganando nada. El orden ya lo preservás por el propio mailboxes (si dos hacen send el que lo hace primero será el primero en ser recibido) y tampoco tenés identidad ¿Cuál sería el sentido? 

Por otro lado en el caso de la votación necesita hacer el send/receive juntos porque en el segundo llega una respuesta el primero y es la única forma de que la respuesta llegue a quien hizo la pregunta, en nuestro caso por otro lado es necesario reunir 5 para hacer la jugada. Por norma general cuando tengas acotada la cantidad de gente (o acotada la cantidad de gente a la vez) conviene hacer un array de mailboxes, cuando no como en el caso de la votación recurrís a cosas así.

Espero que haya quedado más claro.

Saludos!