mailboxes encolan?

mailboxes encolan?

de Pedro Liber Antonio Carrasco Aguilar -
Número de respuestas: 1

1) Supongo que al hacer un recive bloqueante (o cualquier cosa bloqueante) el proceso se encola en una cola del mailbox.Esto es asi?

Pregunto porque vi en ejemplos de pdfs de resolucion de ejercicios de mailbox, que usane mailbox.NotEmpty() para chequear si la cola esta vacia y en funcion de distintos mailbox(y sus colas) manejar la prioridad. Y vi soluciones de examenes que usan un solo mailbox con la cantidad de gente esperando (enviadas en un send y recive tipo contador) y cuando esta es >0 tiene prioridad y si es cero le toca a los otros.

while true{

      if mailbox_prio.NotEmpty(){

            pasan los de prioridad

      }else if mailbox_NOTprio.NotEmpty(){

             pasan los que no tienen prioridad

      }

}

V.S.

while true{

     mailbox.recive(cant_prio);

      if (cant_prio>0){

            pasan los de prioridad

      }else {//cant_prio==0

             pasan los que no tienen prioridad

      }

}

Si encolan se mantendria el orden "FIFO"

Si no encolan cualqueira que este esperando (bloqueado en un recive) podria atender a quien lo despierte (send)

En el segundo caso habria que usar array de mailbox un mailbox por cliente a atender y manejar un id (indice array)

Cual es?

Salu2

En respuesta a Pedro Liber Antonio Carrasco Aguilar

Re: mailboxes encolan?

de Jorge Merlino -

Si el mailbox está vacío los que hacen receive bloqueante se bloquean en orden fifo hasta que llegue algún mensaje al mailbox que puedan recibir.

La función que dice si el mailbox está vacío se refiere a si el mailbox tiene mensajes en espera para recibir. O sea si un receive bloqueante se va a bloquear. No se refiere a cuanta gente hay esperando para recibir.

De todas maneras nosotros no admitimos esta función en nuestros mailboxes y hay que tener en cuenta que en un escenario concurrente que mailbox_prio.NotEmpty() sea true en un if no significa que siga siendo true al ejecutar la siguiente instrucción por lo que de todas maneras se precisa algún mecanismo de sincronización adicional.