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
}
}pendientesguarda los avisos que llegan durante una ronda.- La vacía quien publicó primero: se queda dentro hasta entregarlo todo.
- El
whileentrega 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/2TAREA 1
En la U2, con un
Elige una respuestapublicar que llama a los handlers en el acto, ¿cuándo puede seguir quien publica?TAREA 2
En
Elige una respuestaCentralConCola, ¿quién vacía la cola pendientes?