El problema de los fumadores de cigarrillos es otro problema clsi-co de
sincronizacin. Bsicamente, es un problema de coordinacinentre un agente y tres fumadores en el que intervienen tres ingredien-tes: i) papel, ii) tabaco y iii) fsforos. Por una parte, el agente disponede una cantidad ilimitada respecto a los tres ingredientes. Por otraparte, cada fumador dispone de un nico elemento, tambin en canti-dad ilimitada, es decir, un fumador dispone de papel, otro de tabaco yotro de fsforos. Cada cierto tiempo, el agente coloca sobre una mesa, de maneraaleatoria, dos de los tres ingredientes necesarios para liarse un ciga-rrillo (ver gura 3.11). El fumador que tiene el ingrediente restantecoge los otros dos de la mesa, se lia el cigarrillo y se lo notica alagente. Este ciclo se repite indenidamente.La problemtica principal reside en coordinar adecuadamente alagente y a los fumadores, considerando las siguientes acciones: 1. El agente pone dos elementos sobre la mesa. 2. El agente notica al fumador que tiene el tercer elemento que yapuede liarse un cigarrillo (se simula el acceso del fumador a lamesa). 3. El agente espera a que el fumador le notique que ya ha termi-nado de liarse el cigarrillo. 4. El fumador notica que ya ha terminado de liarse el cigarrillo. 5. El agente vuelve a poner dos nuevos elementos sobre la mesa,repitindose as el ciclo.
Figura 3.11: Esquema grco del problema de los fumadores de
cigarrillos. Este problema se puede resolver utilizando dos posibles esquemas:
Recuperacin selectiva utilizando un nico buzn (ver gura3.13). En
este caso, es necesario integrar en el contenido del men-saje de algn modo el tipo asociado al mismo con el objetivo deque lo recupere el proceso adecuado. Este tipo podra ser A, T, Po F en funcin del destinatario del mensaje.
Recuperacin no selectiva utilizando mltiples buzones (ver -gura
3.14). En este caso, es necesario emplear tres buzones paraque el agente pueda comunicarse con los tres tipos de agentesy, adicionalmente, otro buzn para que los fumadores puedanindicarle al agente que ya terminaron de liarse un cigarrillo
Este ltimo caso de recuperacin no selectiva est estrechamen-te
ligado al planteamiento de las colas de mensajes POSIX, donde noexiste un soporte explcito para llevar a cabo una recuperacin se-lectiva. En la gura 3.12 se muestra el pseudocdigo de una posiblesolucin atendiendo a este segundo esquema.
Figura 3.12: Solucin en pseudocdigo al problema de los fumadores de
cigarrillosusando paso de mensajes Como se puede apreciar en la misma, el agente notica al fumadorque completa los tres ingredientes necesarios para fumar a travs deun buzn especco, asociado a cada tipo de fumador. Posteriormente,el agente se queda bloqueado (mediante receive sobre buzon_agente)hasta que el fumador notique que ya ha terminado de liarse el ci-garrillo. En esencia, la sincronizacin entre el agente y el fumador serealiza utilizando el patrn rendezvous. (Vallejo Fernndez, Gonzales Morcill, & Albusac Jimnez, 2012)