Sistemas operativos modernos
typedef int semaforo; semaforo mutex = 1; semaforo db = 1; int re = 0; void lector{void) { while (TRUE) { down(&mutex); re = re + 1; if (re == 1) down{&db); up{&mutex); leer_base_datos( ); down(&mutex): re = re - 1; if (re == 0) up(Stdb): up(&mutex): usar_datos_leldos( ); /* emplee su imaginaeión */ /* eontrola el acceso a ‘re’V /* eontrola el acceso a la base de datos */ /* núm. procesos que leen o quieren leer */ /* se repite indefinidamente 7 /* obtiene acceso exclusivo a ’re’7 /* un lector más ahora 7 r si es el primer lector... 7 r libera el acceso exclusivo a Ye’7 r accede a los datos 7 /* obtiene acceso exclusivo a ’re’7 r un lector menos ahora 7 /* si es el último lector... 7 /* libera el acceso exclusivo a ’re’7 /* región no crítica 7 void eseritor{void) { while (TRUE) { inventar_datos{ ); down(&db); escribir_base_datos( ): up(&db); } /* se repite indefinidamente r región no crítica 7 /* obtiene acceso exclusivo ’ r actualiza los datos */ /* libera el acceso exclusivo Figura 2-34. Una solución para el problema de los lectores y escritores. 2.4.3 El problema del barbero dormilón Otro problema clásico de comunicación entre procesos tiene lugar en una peluquería. El esta blecimiento tiene un barbero, una silla de barbero y n sillas de espera para los clientes. Si no hay clientes presentes, el barbero se sienta en la silla de barbero y se duerme, como se ilustra en la figura 2-35. Cuando llega un cliente, debe despertar al barbero. Si llegan más clientes mientras el barbero está atendiendo a un cliente, se sientan (si hay sillas vacías), o bien, sa len del establecimiento (si todas las sillas están ocupadas). El problema consiste en progra mar al barbero y a los clientes sin caer en condiciones de competencia. Este problema es
RkJQdWJsaXNoZXIy MjI4NDcx