Title: Problema de los LectoresEscritores
1Problema de los Lectores/Escritores
- Dos tipos de tareas necesitan acceder a una BD.
- Problema de exclusión parcial
- Varios lectores pueden acceder a la vez.
- Si un escritor está accediendo, nadie más puede
acceder a la BD.
2Refinamiento de las operaciones de alto nivel
task body TipoEscritor is begin loop Espera
permiso para escribir Escribe en la BD Notifica
fin de escritura end loop end TipoLector
- task body TipoLector is
- begin
- loop
- Espera permiso para leer
- Lee la BD
- Notifica fin de lectura
- end loop
- end TipoLector
- Operaciones de alto nivel leer, escribir
- El gestor de sincronización concede permisos y
recibe notificaciones. - El gestor debe saber quién está utilizando la BD.
3CTADSOL Lectores/Escritores
C-TADSOL Lectores / Escritores OPERACIONES ACCIÓN
ComenzarLectura TipoGestorLEes ACCIÓN
ComenzarEscritura TipoGestorLEes ACCIÓN
TerminarLectura TipoGestorLEes ACCIÓN
TerminarEscritura TipoGestorLEes PROTOCOLOS
Leer ComenzarLectura TerminarLectura Escribir
ComenzarEscritura TerminarEscritura CONCURRENCIA
Leer
SEMÁNTICA DOMINIO TIPO TipoGestorLE
(NLect N x Esc B ) INVARIANTE ?g?TipoGestorLE
(?g.Esc ? NLect 0) INICIAL(g) ?g.Esc ? g.NLect
0
4C-TADSOL Lectores/Escritores (y ii)
- CPRE ?g.Esc
- ComenzarLectura(g)
- POST gsal gent \ g.NLectsal g.NLectent 1
- CPRE cierto
- TerminarLectura(g)
- POST gsal gent \ g.NLectsal g.NLectent - 1
- CPRE ?g.Esc ? g.NLect 0
- ComenzarEscritura(g)
- POST gsal gent \ gsal.Esc
- CPRE cierto
- TerminarEscritura(g)
- POST gsal gent \ ?gsal.Esc
5Desarrollo de la abstracción de datos (L/E)
- task type Gestor_LE is
- entry Comenzar_Lectura
- entry Comenzar_Escritura
- entry Terminar_Lectura
- entry Terminar_Escritura
- end Gestor_LE
-
- task body Gestor_LE is
- Num_Lectores Natural 0
- Escribiendo Boolean False
- begin
- ...........
- end Gestor_LE
-
- Operación Comenzar_Lectura
- Num_Lectores Num_Lectores 1
- Operación Comenzar_Escritura
- Escribiendo True
- Operación Terminar_Escritura
- Escribiendo False
- Operación Terminar_Lectura
- Num_Lectores Num_Lectores - 1
6Desarrollo de la s. de seguridad
- Tabla de bloqueos ( objetos protegidos).
task type Gestor_LE is entry
Comenzar_Lectura entry Comenzar_Escritura
entry Terminar_Lectura entry
Terminar_Escritura end Gestor_LE task
body Gestor_LE is Num_Lectores Natural
0 Escribiendo Boolean False
begin loop select when
not Escribiendo gt accept
Comenzar_Lectura do
Num_Lectores Num_Lectores 1
end Comenzar_Lectura
or when Num_Lectores 0 and
not Escribiendo gt accept
Comenzar_Escritura do
Escribiendo True end
Comenzar_Escritura or
when True gt accept
Terminar_Lectura do
Num_Lectores Num_Lectores - 1 end
Terminar_Lectura or
when True gt accept Terminar_Escritura do
Escribiendo False
end Terminar_Escritura
end select end loop end Gestor_LE
7Desarrollo de la s. de vivacidad
- Grafo de estados (objetos protegidos)
- Análisis de vivacidad (conclusiones que con
objetos protegidos) - Para evitar la inanición, introducimos una
política de turnos ? lecsescs_rv.adb