PDF de programación - Cena de filosofos y sincronizacion java

Imágen de pdf Cena de filosofos y sincronizacion java

Cena de filosofos y sincronizacion javagráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.481 visualizaciones desde el 14 de Enero del 2017
420,1 KB
34 paginas
Creado hace 12a (14/10/2011)
Cena de filosofos y sincronizacion java

Programación concurrente y Distribuída

Curso 2011-12

Miguel Telleria, Laura Barros, J.M. Drake

telleriam AT unican.es

Computadores y Tiempo Real

http://www.ctr.unican.es

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 2 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

● Presentación de los filósofos chinos

Contenido

● Especificación UML

● Paralelización

● Sincronización de espera

● Sincronización bloqueante

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 3 de 34

Presentación de los filósofos chinos

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 5 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

Vamos a verla funcionar

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 6 de 34

Especificación UML

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

Diagrama de clases

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 8 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

● Comedor

Misiones

● Palillo

● 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

● 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

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 9 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

Filosofo

● Objeto activo con su ciclo de vida
● Decisión de diseño:

● Aunque tiene asociados

los palillos, invoca los
métodos coge() y deja()
a través del comedor

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 10 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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 informa
es el comedor el que devuelve si sí o si
no.

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 11 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

Palillo

● “Se deja” coger o no:

● Es decir, es el propio palillo el que

maneja su política de acceso

● El atributo privado palilloTomado es el que

lleva la cuenta de si hay palillo o no

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 12 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

GestorSillas
● Usado para evitar el bloqueo múltiple
● El cojoSilla() directamenta da el acceso a

la silla

● El atributo privado sillasDisponibles es el

que lleva la cuenta de si hay silla libre
o no.

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 13 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 14 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

Estados del filosofo

● El filósofo pasa de un

estado a otro mediante
el método actualiza().

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 15 de 34

Paralerización

(similar a la práctica 1)

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 17 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 18 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

Vamos a ejecutarlo

● ¿Se respeta el número de sillas?

● ¿Se mantiene el acceso exclusivo a los palillos?

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 19 de 34

Sincronización de espera

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 21 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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...

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 22 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 23 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

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.

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 24 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

¿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...

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 25 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

¿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).

14 Oct 2011

Miguel Telleria de Esteban telleriam AT unican.es)

Página 26 de 34

Computadores y Tiempo Real
Universidad de Cantabria

Programación concurrente y distribuída

Cena de filosofos y sincronizacion java

Solución primera

● Puesto que todos usamos el co
  • Links de descarga
http://lwp-l.com/pdf1040

Comentarios de: Cena de filosofos y sincronizacion java (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad