Ejercicios 70 min 33 preguntas
TeoríaPaso 1 de 14

¿Y si llegan tres eventos mientras el programa está ocupado?

Hasta ahora, quien producía un evento esperaba a que se atendiera. Repasa cómo lo hemos ido viendo:

U1 · Fuente, evento, receptor

Un while que obtiene un evento y lo entrega. Solo tenía uno en la mano: para el siguiente había que esperar al teclado.

U2 · Callbacks y despacho

publicar llamaba en el acto a los handlers. Quien publicaba esperaba hasta que el último terminaba.

U3 · Una cola en medio

Quien produce no espera: deja el evento y se va. Alguien lo atiende después, cuando le toque.

Lo que dejamos pendiente en la U2

En la clase 5 de la U2 arreglamos la reentrancia de la central de pedidos cambiando una sola palabra: CentralConCola. Su publicar ya llevaba dentro una cola y un while:

Kotlin
fun publicar(estado: String) {
    pendientes.addLast(estado)
    if (notificando) return
    notificando = true
    try {
        while (pendientes.isNotEmpty()) {
            val siguiente = pendientes.removeFirst()
            for (o in oyentes.toList()) {
                o(siguiente)
            }
        }
    } finally {
        notificando = false
    }
}
  • pendientes guarda los avisos que llegan durante una ronda.
  • La vacía quien publicó primero: se queda dentro hasta entregarlo todo.
  • El while entrega los avisos de uno en uno: cada ronda termina antes de que empiece la siguiente.

La pregunta con la que cerramos la U2 era: ¿y si quien publica dejara el aviso y se fuera? Esa es exactamente la idea de esta unidad.

Responde para continuar

0/2
TAREA 1
En la U2, con un publicar que llama a los handlers en el acto, ¿cuándo puede seguir quien publica?
Elige una respuesta
TAREA 2
En CentralConCola, ¿quién vacía la cola pendientes?
Elige una respuesta