Documente Academic
Documente Profesional
Documente Cultură
ndice general I
1 1 3
Referencia del Archivo /home/darwin/Escritorio/SDC/Segundo Parcial/Hotel_la_discutida.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.1.1 Documentacin de los denes . . . . . . . . . . . . . . . . . . 2.1.1.1 2.1.1.2 2.1.2 clientes . . . . . . . . . . . . . . . . . . . . . . . . . rebanadas . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 4 4 5 6 6 6 6 6 7 7 7 7
2.1.3
Documentacin de las variables . . . . . . . . . . . . . . . . . 2.1.3.1 2.1.3.2 2.1.3.3 2.1.3.4 2.1.3.5 2.1.3.6 2.1.3.7 clientes_atendidos . . . . . . . . . . . . . . . . . . . despertar_cocinero jamon mutex . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
necesito_ingrediente . . . . . . . . . . . . . . . . . . queso . . . . . . . . . . . . . . . . . . . . . . . . .
tostadas . . . . . . . . . . . . . . . . . . . . . . . .
2.2
Referencia del Archivo /home/darwin/Escritorio/SDC/Segundo Parcial/Parking_el_auto_fantstico.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.1 Documentacin de los denes . . . . . . . . . . . . . . . . . . 2.2.1.1 2.2.1.2 autos . . . . . . . . . . . . . . . . . . . . . . . . . . cap_parking . . . . . . . . . . . . . . . . . . . . . . 8 8 9
II
NDICE GENERAL
2.2.2
9 9 9
llegando_auto . . . . . . . . . . . . . . . . . . . . .
2.2.3
Documentacin de las variables . . . . . . . . . . . . . . . . . 11 2.2.3.1 2.2.3.2 2.2.3.3 2.2.3.4 2.2.3.5 2.2.3.6 2.2.3.7 2.2.3.8 2.2.3.9 autos_en_parking . . . . . . . . . . . . . . . . . . . 11 bajar . . . . . . . . . . . . . . . . . . . . . . . . . . 11 conta_autos_bajar . . . . . . . . . . . . . . . . . . . 11 conta_autos_subir . . . . . . . . . . . . . . . . . . . 11 mutex . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.3.10 subir . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 Referencia del Archivo /home/darwin/Escritorio/SDC/Segundo Parcial/Restaurante_el_Mesn.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3.1 Documentacin de los denes . . . . . . . . . . . . . . . . . . 13 2.3.1.1 2.3.2 clientes . . . . . . . . . . . . . . . . . . . . . . . . . 13
Documentacin de las funciones . . . . . . . . . . . . . . . . . 14 2.3.2.1 2.3.2.2 2.3.2.3 2.3.2.4 2.3.2.5 cajers . . . . . . . . . . . . . . . . . . . . . . . . . . 14 coci . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 empaqt . . . . . . . . . . . . . . . . . . . . . . . . . 14 main . . . . . . . . . . . . . . . . . . . . . . . . . . 15 recep . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.3
Documentacin de las variables . . . . . . . . . . . . . . . . . 15 2.3.3.1 2.3.3.2 2.3.3.3 2.3.3.4 2.3.3.5 2.3.3.6 cajeros . . . . . . . . . . . . . . . . . . . . . . . . . 15 cocineros . . . . . . . . . . . . . . . . . . . . . . . . 16 empaquetadores . . . . . . . . . . . . . . . . . . . . 16 mutex . . . . . . . . . . . . . . . . . . . . . . . . . 16
n_elementos_cobrar . . . . . . . . . . . . . . . . . . 16 n_elementos_cocina . . . . . . . . . . . . . . . . . . 16
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
NDICE GENERAL
III
2.3.3.7
n_elementos_empaq . . . . . . . . . . . . . . . . . . 16
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
Captulo 1
Indice de archivos
1.1. Lista de archivos
Lista de todos los archivos con descripciones breves: /home/darwin/Escritorio/SDC/Segundo Parcial/Hotel_la_discutida.c . . . . . . 3 /home/darwin/Escritorio/SDC/Segundo Parcial/Parking_el_auto_fantstico.c . 7 /home/darwin/Escritorio/SDC/Segundo Parcial/Restaurante_el_Mesn.c . . . 12
Indice de archivos
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
Captulo 2
Documentacion de archivos
2.1. Referencia del Archivo /home/darwin/Escritorio/SDC/Segundo Parcial/Hotel la discutida.c
#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h>
denes
#dene clientes 100
Denimos la cantidad clientes.
#dene rebanadas 10
Denimos la cantidad de rebanadas que pondra el cocinero.
Funciones
void cocinero (void)
Cocinero: Siempre duerme, solo es despertado por el cliente.
int main ()
Se crean los hilos.
Documentacin de archivos
Variables
pthread_mutex_t mutex
El mutex con el cual controlaremos a cada proceso.
pthread_cond_t necesito_ingrediente
Se necesita algun ingrediente.
pthread_cond_t despertar_cocinero
Despertar al cocinero para poner los ingredientes que se terminaron.
int clientes_atendidos = 0
Clientes servidos satisfactoriamente.
2.1.1.
2.1.1.1.
Denimos la cantidad clientes. Denimos el numero de clientes con el cual vamos a trabajar. Denicin en la lnea 11 del archivo Hotel_la_discutida.c.
2.1.1.2.
#dene rebanadas 10
Denimos la cantidad de rebanadas que pondra el cocinero. Denimos el numero de rebanadas que pondra el cocinero cuando estas se hayan terminado. Denicin en la lnea 17 del archivo Hotel_la_discutida.c.
2.1.2.
2.1.2.1.
Cada cliente solicita un numero de rebanadas de cada ingrediente. El cliente en turno solicita un numero al azar menor o igual al numero de rebanadas que el cocinero pone en la mesa sin saber si estan disponibles, si estan disponibles las toma sin ninguna dicultad, pero de lo contrario toma solo las que hay, y despierta al cocinero para que ponga nuevamente el ingredientes y el cliente toma solo las que le faltaban para completar su porcion.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
2.1 Referencia del Archivo /home/darwin/Escritorio/SDC/Segundo Parcial/Hotel_la_discutida.c Bloqueamos al mutex. El cliente empiesa a pedir las rebanas que el quiere. Pide rebanadas de ingredientes. Vericamos que las que pidio esten disponibles. Si es as, las toma sin ninguna dicultad. Le decrementa al ingrediente las rebanadas que tomo. Si no estan disponibles todas las rebanadas que pidio. Solo toma las que hay. Ingrediente que pidio se va ha cero. Despertamos al cocinero para que reponga los ingredientes que hacen falta. Esperamos hasta que el cocinero nos avice que ya las repuso. Ya que nos aviso. Tomamos las que nos faltaban. Le decrementamos al ingrediente que pidio las que nos faltaban. Y asi lo hace con cada ingrediente. Ya que termino de tomar todos los ingredientes que pidio. Entonces incrementamos el numero de clientes atendidos. Liberamos el mutex.
Al na mandamos una seal al cocinero para que despierte y termine su hilo. Es necesario hacer esto por que el cocinero como siempre esta dormido y el no se entera cuando terminamos de atender a los clientes. Denicin en la lnea 112 del archivo Hotel_la_discutida.c.
2.1.2.2.
Cocinero: Siempre duerme, solo es despertado por el cliente. Siempre esta durmiendo aunque se inicie antes pero si los ingredientes no han sido terminados el sigue durmiendo, solo es despertado cuando un cliente le avisa que falta algun ingrediente y entonces este repone solo lo que ya ha sido vaciado. Vericamos si el numero de clientes atendidos todavia son menores al numero de clientes totales. Si todavia no hay clientes por atender. Bloqueamos el mutex Vericamos si ya se termino el jamon. Si ya se termino el jamon, entonces lo reponemos. Vericamos si ya se termino el queso. Si ya se termino el queso, entonces lo reponemos. Vericamos si ya se termino las tostadas.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
Documentacin de archivos
Si ya se terminaron las tostadas, entonces las reponemos. Avisamos que ya se repusieron los ingredientes que estaban vacios. Duerme el cocinero hasta que nuevamente se termine algun ingrediente. Loberamos el mutex. Denicin en la lnea 63 del archivo Hotel_la_discutida.c.
2.1.2.3.
int main ( )
Se crean los hilos. Se declaran los hilos. Inicializamos el mutex. Inicializamos las variables de condicion. Creamos los hilos. Cachamos los hilos. Destruimos el mutex. Destruimos las variables de condicion. Denicin en la lnea 220 del archivo Hotel_la_discutida.c.
2.1.3.
2.1.3.1.
Clientes servidos satisfactoriamente. Variable que lleva el control de los clientes que se han servido su porcion completa. Denicin en la lnea 56 del archivo Hotel_la_discutida.c.
2.1.3.2.
Despertar al cocinero para poner los ingredientes que se terminaron. Variable de condicion para despertar al cocinero cuando a un cliente le hace falta de algun ingrediente. Denicin en la lnea 32 del archivo Hotel_la_discutida.c.
2.1.3.3.
Rebanadas de jamon disponibles. Variable que lleva el control de las rebanadas de jamon que hay disponibles en la mesa. Denicin en la lnea 38 del archivo Hotel_la_discutida.c.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
2.2 Referencia del Archivo /home/darwin/Escritorio/SDC/Segundo Parcial/Parking_el_auto_fantstico.c 2.1.3.4. pthread mutex t mutex
El mutex con el cual controlaremos a cada proceso. Denicin en la lnea 20 del archivo Hotel_la_discutida.c.
2.1.3.5.
Se necesita algun ingrediente. Variable de condicion para avisar cuando el cliente necesita algun ingrediente. Denicin en la lnea 26 del archivo Hotel_la_discutida.c.
2.1.3.6.
Rebanadas de queso disponibles. Variable que lleva el control de las rebanadas de queso que hay disponibles en la mesa. Denicin en la lnea 44 del archivo Hotel_la_discutida.c.
2.1.3.7.
Rebanadas de tostadas disponibles. Variable que lleva el control de las rebanadas de tostadas que hay disponibles en la mesa. Denicin en la lnea 50 del archivo Hotel_la_discutida.c.
2.2.
#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h>
denes
#dene cap_parking 10
Denimos la capacidad del parking.
#dene autos 30
Denimos la cantidad autos.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
Documentacin de archivos
Funciones
void llegando_auto (void)
Llegan los autos.
int main ()
Se crean los hilos.
Variables
pthread_mutex_t mutex
El mutex con el cual controlaremos a cada proceso.
pthread_cond_t para_subir
Autos por subir.
pthread_cond_t para_bajar
Autos por bajar.
pthread_cond_t parking_no_lleno
La variable de condicion para avisar cuando el parking no tiene lugares disponibles.
pthread_cond_t parking_no_vacio
La variable de condicion para avisar cuando el parking no esta lleno.
int autos_en_parking = 0
Variable que contabiliza cuantos autos hay en el parking.
int subir = 0
Variable que indica cuantos autos hay encolados para utilizar la rampa y ser subidos al parking.
int bajar = 0
Variable que indica cuantos autos hay encolados para utilizar la rampa y ser bajados al parking.
int conta_autos_subir = 0
Variable que cuenta los autos que voy subiendo.
int conta_autos_bajar = 0
Variable que cuenta los autos que voy bajando.
2.2.1.
2.2.1.1.
Denimos la cantidad autos. Denimos el numero de autos con el cual vamos a trabajar. Denicin en la lnea 17 del archivo Parking_el_auto_fantstico.c.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
2.2 Referencia del Archivo /home/darwin/Escritorio/SDC/Segundo Parcial/Parking_el_auto_fantstico.c 2.2.1.2. #dene cap parking 10
Denimos la capacidad del parking. Denimos el numero maximo que podra tener en su interior el parking. Denicin en la lnea 11 del archivo Parking_el_auto_fantstico.c.
2.2.2.
2.2.2.1.
Subir autos. Son bajados por la rampa los autos. Bloqueamos el mutex. Vericamos que hayan autos para ser bajados. Si no es as esperamos a que alguien solicite bajar su auto. Ahora, si hay autos para bajar, entonces los bajamos todos. Incrementamos los autos que he bajado y lo bajo. Vaciamos la cola que espera la rampa para bajar. Avisamos que el parkin no esta lleno y que por lo tanto hay lugares para recerbar. Liberamos el mutex. Denicin en la lnea 192 del archivo Parking_el_auto_fantstico.c.
2.2.2.2.
Llegan los autos. Llegan los utos y se van encolando para luego ser subidos, siempre y cuando no este lleno el parking o los lugares esten reservados, esto quiere decir que puede que no se hayan subido todavia los autos. Bloqueamos el mutex. Vericamos que la capacidad de los autos encolados para subir no sea igual a la capacidad del parking. Si es as esperamos que algun auto sea bajado. Vericamos que los autos en el parking no sea igual a la capacidad del parking. Si es as esperamos que algun auto sea bajado. Vericamos que no haya autos encolados para bajar. Si es as esperamos que sean bajados. Ya que no hay ningun inconveniente, entonces reservamos el lugar para el auto.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
10
Documentacin de archivos
Incrementamos los autos en el parking. Avisamos a la rampa que hay un auto mas para subir. Liberamos el mutex. Denicin en la lnea 53 del archivo Parking_el_auto_fantstico.c.
2.2.2.3.
int main ( )
Se crean los hilos. Se declaran los hilos. Inicializamos el mutex. Inicializamos las variables de condicion. Creamos los hilos. Cachamos los hilos. Destruimos el mutex. Destruimos las variables de condicion. Denicin en la lnea 231 del archivo Parking_el_auto_fantstico.c.
2.2.2.4.
Solicita entrega de autos. Se solicitan los autos y se van encolando para luego ser bajados, siempre y cuando el parking contenga autos o no hayan autos esperando subir. Bloqueamos el mutex. Vericamos que los autos en el parking no sea igual a cero. Si es as entonces esperamos que algun auto sea subido. Vericamos que no haya autos esperando subir. Si es as esperamos que sean subidos. Ya que no hay ningun inconveniente entonces encolamos el auto para ser bajado. Decrementamos la cantidad de autos en eRestaurante el Mesn donde su hambre es saciada!l parking. Avisamos a la rampa que hay un auto mas para ser bajado Liberamos el muex. Denicin en la lnea 107 del archivo Parking_el_auto_fantstico.c.
2.2.2.5.
Subir autos.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
2.2 Referencia del Archivo /home/darwin/Escritorio/SDC/Segundo Parcial/Parking_el_auto_fantstico.c Son subidos por la rampa los autos. Bloqueamos el mutex. Vericamos que hayan autos para subir. Si no es as esperamos a que alguien reserve un lugar. Ahora, si hay autos para subir, entonces los subimos todos. Incrementamos los autos que he subido y lo subo. Vaciamos la cola que espera la rampa para subir. Avisamos que el parkin tiene autos. Liberamos el mutex. Denicin en la lnea 151 del archivo Parking_el_auto_fantstico.c.
11
2.2.3.
2.2.3.1.
Variable que contabiliza cuantos autos hay en el parking. Denicin en la lnea 38 del archivo Parking_el_auto_fantstico.c.
2.2.3.2.
int bajar = 0
Variable que indica cuantos autos hay encolados para utilizar la rampa y ser bajados al parking. Denicin en la lnea 42 del archivo Parking_el_auto_fantstico.c.
2.2.3.3.
int conta_autos_bajar = 0
Variable que cuenta los autos que voy bajando. Denicin en la lnea 46 del archivo Parking_el_auto_fantstico.c.
2.2.3.4.
int conta_autos_subir = 0
Variable que cuenta los autos que voy subiendo. Denicin en la lnea 44 del archivo Parking_el_auto_fantstico.c.
2.2.3.5.
El mutex con el cual controlaremos a cada proceso. Denicin en la lnea 20 del archivo Parking_el_auto_fantstico.c.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
12
Documentacin de archivos
2.2.3.6.
Autos por bajar. La variable de condicion para contar los autos que tengo por bajar. Denicin en la lnea 32 del archivo Parking_el_auto_fantstico.c.
2.2.3.7.
Autos por subir. La variable de condicion para contar los autos que tengo por subir. Denicin en la lnea 26 del archivo Parking_el_auto_fantstico.c.
2.2.3.8.
La variable de condicion para avisar cuando el parking no tiene lugares disponibles. Denicin en la lnea 34 del archivo Parking_el_auto_fantstico.c.
2.2.3.9.
La variable de condicion para avisar cuando el parking no esta lleno. Denicin en la lnea 36 del archivo Parking_el_auto_fantstico.c.
2.2.3.10.
int subir = 0
Variable que indica cuantos autos hay encolados para utilizar la rampa y ser subidos al parking. Denicin en la lnea 40 del archivo Parking_el_auto_fantstico.c.
2.3.
#include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h>
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
13
denes
#dene clientes 10
Denimos la cantidad clientes.
Funciones
void recep (void)
Recibe a los clientes.
int main ()
Se crean los hilos.
Variables
pthread_mutex_t mutex
El mutex con el cual controlaremos a cada empleado.
pthread_cond_t cocineros
La variable de condicion para controlar al cocinero.
pthread_cond_t empaquetadores
La variable de condicion para controlar al empaquetador.
pthread_cond_t cajeros
La variable de condicion para controlar al cajero.
int n_elementos_cocina = 0
Nos indica cuantos pedidos hay que cocinar.
int n_elementos_empaq = 0
Nos indica cuantos pedidos hay que empaquetar.
int n_elementos_cobrar = 0
Nos indica cuantos pedidos hay que cobrar.
2.3.1.
2.3.1.1.
Denimos la cantidad clientes. Denimos el numero de clientes con el cual vamos a trabajar. Denicin en la lnea 11 del archivo Restaurante_el_Mesn.c.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
14
Documentacin de archivos
2.3.2.
2.3.2.1.
Se cobran y entrgan los pedidos. Se cobran los pedidos cuando el empaquetador avisa que hay paqietes listos para cobrar y entregar. Bloquemaos el mutex. Vericamos que hay algun pedidos que cobrar. Si no hay, esperamos ha que el empaquetador nos avice. Ya que nos aviso, entonces lo cobramos y etregamos. Decrementamos los pedidos que hay para cobrar. Liberamos el mutex. Denicin en la lnea 136 del archivo Restaurante_el_Mesn.c.
2.3.2.2.
Se cocinan los pedidos de los clientes. Se preparan los pedidos cuando el recepcionista avisa. Bloqueamos el mutex. Vericamos que hay algun pedido que cocinar. Si no hay, esperamos ha que el recepcionista nos avice. Ya que nos aviso, entonces lo preparamos. Decrementamos los pedidos que hay para cocinar. Incrementamos los pedidos que tiene el empaquetador. Avisamos al empaquetador que tiene pedidos. Liberamos el mutex. Denicin en la lnea 65 del archivo Restaurante_el_Mesn.c.
2.3.2.3.
Se empaquetan los pedidos de los clientes. Se empaquetan los pedidos cuando el cocinero avisa. Bloquemaos el mutex. Vericamos que hay algun pedido que empaquetar. Si no hay, esperamos ha que el cocinero nos avice. Ya que nos aviso, entonces lo empaquetamos.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
2.3 Referencia del Archivo /home/darwin/Escritorio/SDC/Segundo Parcial/Restaurante_el_Mesn.c Decrementamos los pedidos que hay para empaquetar. Incrementamos los pedidos que tiene el cajero. Avisamos al cajero que tiene pedidos para cobrar. Liberamos el mutex. Denicin en la lnea 100 del archivo Restaurante_el_Mesn.c.
15
2.3.2.4.
int main ( )
Se crean los hilos. Se declaran los hilos. Inicializamos el mutex. Inicializamos las variables de condicion. Creamos los hilos. Cachamos los hilos. Destruimos el mutex. Destruimos las variables de condicion. Denicin en la lnea 169 del archivo Restaurante_el_Mesn.c.
2.3.2.5.
Recibe a los clientes. Se reciben alos clientes y se incrementa el numero de pedidos que se tienen que elaborar en la cocina y se le manda una seal para que sepa que tiene pedidos que cocinar. Bloqueamos el mutex y recibimos al cliente Incrementamos el numero de pedidos que tiene la cocina. Avisamos a los cocineros de que ya tienen pedido. Liberamos el mutex. Denicin en la lnea 41 del archivo Restaurante_el_Mesn.c.
2.3.3.
2.3.3.1.
La variable de condicion para controlar al cajero. Denicin en la lnea 23 del archivo Restaurante_el_Mesn.c.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen
16
Documentacin de archivos
2.3.3.2.
La variable de condicion para controlar al cocinero. Denicin en la lnea 17 del archivo Restaurante_el_Mesn.c.
2.3.3.3.
La variable de condicion para controlar al empaquetador. Denicin en la lnea 20 del archivo Restaurante_el_Mesn.c.
2.3.3.4.
El mutex con el cual controlaremos a cada empleado. Denicin en la lnea 14 del archivo Restaurante_el_Mesn.c.
2.3.3.5.
int n_elementos_cobrar = 0
Nos indica cuantos pedidos hay que cobrar. Denicin en la lnea 32 del archivo Restaurante_el_Mesn.c.
2.3.3.6.
int n_elementos_cocina = 0
Nos indica cuantos pedidos hay que cocinar. Denicin en la lnea 26 del archivo Restaurante_el_Mesn.c.
2.3.3.7.
int n_elementos_empaq = 0
Nos indica cuantos pedidos hay que empaquetar. Denicin en la lnea 29 del archivo Restaurante_el_Mesn.c.
Generado el Martes, 16 de Octubre de 2012 21:27:36 para Ejercicio a Resolver Mediante Semaforo (Mutex) y Monitores por Doxygen