cena de filosofos y sincronizacion java - ctr.unican.es · 14 oct 2011 miguel telleria de esteban...
TRANSCRIPT
![Page 1: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/1.jpg)
Cena de filosofos y sincronizacion java
Miguel Telleria, Laura Barros, J.M. Drake
telleriam AT unican.es
Computadores y Tiempo Real
http://www.ctr.unican.es
Programación concurrente y Distribuída
Curso 2011-12
![Page 2: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/2.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Objetivos
● Presentaros la aplicación de “filósofos chinos” con UML
● Practicar lo visto en sincronismo de java
● Prepararos para la practica 2 que es muy similar
![Page 3: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/3.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 3 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Contenido● Presentación de los filósofos chinos
● Especificación UML
● Paralelización
● Sincronización de espera
● Sincronización bloqueante
![Page 4: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/4.jpg)
Presentación de los filósofos chinos
![Page 5: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/5.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 5 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Los filósofos chinos● 4 filósofos
● Rojo, azul, amarillo, verde
● 4 palillos● 1 entre cada 2 filósofos
● Gestor de sillas:● Numero de sillas configurable
● Ciclo de cada filosofo: – Pensando
– esperando silla
– esperando palillo derecho
– esperando palillo izquierdo
– comiendo
![Page 6: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/6.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 6 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Vamos a verla funcionar
![Page 7: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/7.jpg)
Especificación UML
![Page 8: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/8.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 8 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Diagrama de clases
![Page 9: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/9.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 9 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Misiones● Comedor
● Datos globales
● Punto de acceso para el resto de las clases
● Determina si da una silla o no● GUI
● Filosofo● Objetos activos
● Gestor de sillas● Mantiene la cantidad de sillas
libres
● Palillo● Modo polling: Devuelve falso
si el palillo está cogido
● Modo espera: Bloquea hasta que el palillo esté libre
● Prueba secuencial● Instancia el sistema● Crea los threads
● Termina la ejecución
![Page 10: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/10.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 10 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Filosofo● Objeto activo con su ciclo de vida● Decisión de diseño:
● Aunque tiene asociadoslos palillos, invoca losmétodos coge() y deja()a través del comedor
![Page 11: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/11.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 11 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Comedor● Da acceso al resto de
elementos● Elección de diseño:
● La clase Palillo devuelve si el palillo estálibre
● El Gestor de Sillas simplemente informaes el comedor el que devuelve si sí o sino.
![Page 12: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/12.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 12 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Palillo● “Se deja” coger o no:
● Es decir, es el propio palillo el quemaneja su política de acceso
● El atributo privado palilloTomado es el quelleva la cuenta de si hay palillo o no
![Page 13: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/13.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 13 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
GestorSillas● Usado para evitar el bloqueo múltiple
● El cojoSilla() directamenta da el acceso ala silla
● El atributo privado sillasDisponibles es elque lleva la cuenta de si hay silla libreo no.
![Page 14: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/14.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 14 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Programa principal● Instancia los threads y espera a que
el tiempo de ejecución se termine.● Define el numero de sillas● Define el tiempo de actualización
![Page 15: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/15.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 15 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Estados del filosofo● El filósofo pasa de un
estado a otro medianteel método actualiza().
![Page 16: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/16.jpg)
Paralerización(similar a la práctica 1)
![Page 17: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/17.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 17 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Cambios en el programa principal● El main() ya no llama a actualiza
● Lo hará el propio thread en su run()
● El main se simplifica a:● Se crean los filosofos
– Se les arrancan (si no se arrancan ellos sólos)
● Se espera un tiempo de ejecución
● Se ejecuta termina() en ellos
![Page 18: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/18.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 18 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Cambios en el filósofo● El actualiza() se llama internamente desde el run()● Se puede auto-arrancar (si heredamos de Thread)
● Si no nos arranca el que nos crea
![Page 19: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/19.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 19 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Vamos a ejecutarlo● ¿Se respeta el número de sillas?
● ¿Se mantiene el acceso exclusivo a los palillos?
![Page 20: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/20.jpg)
Sincronización de espera
![Page 21: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/21.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 21 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Identificamos la sincronización● Que Objetos tenemos que sincronizar
● Información compartida concurrentemente
● Y que es posible que entre en incoherencia
● Limitación de las secciones críticas● ¿Lectura?, ¿Escritura?
● Atomicidad
● Ámbito de la sincronización● Que objetos tienen que esperar
● No sobresincronizar
![Page 22: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/22.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 22 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Cosas que no hace falta sincronizar● Variables locales (ej estado)
● Ya que están duplicadas en cada thread
● Acceso concurrente en sólo lectura● Mientras no haya ningún escritor a la vez claro
● Accesos ya gestionado por una librería o sistema operativo● (mientras no importe que se haga en un orden u otro)
● La GUI: SWT mantiene su propio thread para ello
● Dispositivos: discos duro, pantalla...
![Page 23: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/23.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 23 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Métodos synchronized vs bloque synchronized● El método synchronized es equivalente a:
● Envolver todo el código del método con
synchronize(this)
● Si la clase está bien diseñada con esto puede bastar● Nos aseguramos de que “nadie se olvida” sincronizar
● Con que uno se olvidase no se mantiene la exclusión mutua
![Page 24: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/24.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 24 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Métodos synchronized vs bloque synchronized● Sin embargo a veces esto no siempre es posible
● La sincronización (duración o ámbito) puede depender de un argumento, un estado, un instante...
– Si sé que en cierto estado voy a ser el único en acceder a la información
● A veces la sección crítica abarca más de un método
– Ej: test_and_set()
● Buen diseño: poner el mutex lo más profundo posible● Los objetos llamantes no deberían verlo
● La implementación es quien debería definir el ámbito en función de un atributo privado
– Si es necesario se pone synchronize(this) en parte del código
● Caso test_and_set(), dar un método sincronizado que englobe los dos.
![Page 25: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/25.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 25 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
¿Es necesario sincronizar en la implementación secuencial?
● ¿Si?, ¿No?, ¿Por qué?● Y no vale con que “no hay concurrencia” ya que actualiza no deja de
ser un planificador cíclico...
![Page 26: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/26.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 26 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
¿Es necesario sincronizar en la implementación secuencial? (respuesta)
● NO es necesario
● Puesto que todas las llamadas a actualiza()● Se ejecutan de manera atómica● Dejan las variables en estado coherente
● Podría no ser así● Ej: que haya un estado (miro si silla libre) y luego otro (cojo silla).
![Page 27: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/27.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 27 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Solución primera● Puesto que todos usamos el comedor
● Hacemos los métodos del comedor synchronized
● ¿Funciona?
● ¿Que inconvenientes presenta?
![Page 28: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/28.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 28 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Inconvenientes de la solución primera● Dos filosofos de frente accederían a coge y deja palillo de
manera exclusiva.
● El tomar la silla también impediría a otro filósofo empezar a tomar (o dejar el palillo).
● Tenemos “sobre-sincronización” al usar un único lock global
![Page 29: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/29.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 29 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Hilamos más fino● Cada filosofo retendrá el lock del objeto que esté usando
● No habrá contención en palillos enfrentados
● No habrá contención entre palillos y sillas
![Page 30: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/30.jpg)
Sincronización bloqueante
![Page 31: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/31.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 31 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Esperas activa vs espera bloqueante● Independientemente del ámbito, duración y datos protegidos
tenemos 2 estrategias de actuación:● Espera activa: Se pregunta reiteradamente el estado de un recurso
opcionalmente con un sleep.
– Ventaja 1: Sencillez de implementación,
– Ventaja 2: No es bloqueante (ej multicore en ciertos entornos)
– Inconveniente: Gasto inútil de CPU
● Espera bloqueante: Se queda dormido a la espera de ser notificado
– Ventaja: Ahorro de CPU (a veces es relativo)
– Desventaja: Requiere de ciertos recursos del entorno y de bloqueos
● En la mayoría de los casos preferiremos la espera bloqueante.● Ejemplo donde no: Las interrupciones hardware
– Si nos bloqueamos, el scheduler no nos despierta (no somos proceso del S.O.).
– Alternativa: Hacemos un pooling y nos volvemos a programar
![Page 32: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/32.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 32 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Como lo hacemos ● Comportamiento de variable de condición + mutex:
● wait(): Nos suspendemos y soltamos el lock
● notify(): Despertamos a uno y le entregamos el lock
● notifyAll(): Despertamos a todos y se ejecutarán 1 a 1 atómicamente con el lock tomado.
● Cosas a tener en cuenta:● Sólo podemos ejecutarlos sobre el objeto en el que estamos
sincronizados.
– Por lo tanto tenemos que estar en ámbito synchronized
● Siempre que hagáis un wait() no olvidéis que tiene que haber un notify() o notifyAll() correspondiente.
● Englobar todo en un predicado lógico
– Ya que al salir del wait() puede seguir habiendo contención y nos tenemos que volver a dormir. Esto ocurre siempre con los notifyAll()
![Page 33: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/33.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 33 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
Wait() y sleep()● Dos diferencias:
● sleep() no suelta el lock
– Por lo tanto impedimos el acceso al objeto mientras el objeto duerme.
● sleep() vuelve inmediatamente de un interrupt()
– wait() vuelve sólo cuando se le notifica
– en ambos casos salta la interrupción InterruptedException
![Page 34: Cena de filosofos y sincronizacion java - ctr.unican.es · 14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 2 de 34 Programación concurrente y distribuída](https://reader031.vdocuments.site/reader031/viewer/2022021904/5ba4a8de09d3f235188bad62/html5/thumbnails/34.jpg)
14 Oct 2011 Miguel Telleria de Esteban telleriam AT unican.es) Página 34 de 34
Cena de filosofos y sincronizacion javaProgramación concurrente y distribuídaComputadores y Tiempo RealUniversidad de Cantabria
¡¡Hagamos la prueba!!● Diferencias entre palillo y gestor de sillas
● El objeto palillo puede hacer el wait() el mismo
● La clase sillas no puede hacer el wait() a menos de que tome la responsabilidad de gestionar su propio acceso.