[2015][Julio][Problema 1]

[2015][Julio][Problema 1]

de Rossana Guerra Celano -
Número de respuestas: 2
Hola, no entiendo una parte de la solución. Concretamente


case ESTADO_ESPERO_CIERRE_CASILLERO_TICKET:
short estado = IN(ESTADO_CASILLEROS);
if (!(estado & (1 << casilleroAbriendo))){
     estado = ESTADO_ESPERO_BOTON_TICKET;
     contado = false;
     if (enAlarma){ // Si activé la alarma, la apago
            OUT(PANEL, 0);
            enAlarma = 0;
     }
    if (estado == ESTADO_ESPERO_CIERRE_CASILLERO_BOTON){
        // Si el casillero se abrió por botón imprimo el
        // ticket
         unsinged short rand = random();
        OUT(TICKET, rand);
        casilleros[casilleroAbriendo].codigoApertura = rand;
     }
}

¿Cuándo se cumple if (estado == ESTADO_ESPERO_CIERRE_CASILLERO_BOTON),
si estado fue seteado arriba a ESTADO_ESPERO_BOTON_TICKET?

Gracias!


En respuesta a Rossana Guerra Celano

Re: [Julio 2015] Problema 1

de Javier Agustin Sanchez Burgos -

Yo lo que pensé es que al ser interrupciones, si se cambia de estado antes de ese if y posterior a la asignación que mencionas, entra. A modo de ejemplo, se indica que no hay pedidos (ESTADO_ESPERO_BOTON_TICKET) pero ¿qué pasa si durante esa espera alguien deja la puerta abierta (ESTADO_ESPERO_CIERRE_CASILLERO_BOTON) porque retiro sus cosas y se fue?.

Espero haberme sido conciso.