Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Uso de semáforos
Curso 2023
2. Secuencialización/señalización
1
Acceso mutuo a una sección
crı́tica
Acceso mutuo a una sección crı́tica
INIT(S, 1);
procedure Alicia() procedure Bernardo()
repeat repeat
P(S); P(S);
acceder A; acceder B;
V(S); V(S);
otras tareas; otras tareas;
until False until False
end procedure end procedure
2
Acceso mutuo a una sección crı́tica
3
Secuencialización/señalización
Secuencialización/señalización
4
Secuencialización/senalizacion
6
Problema de los productores y consumidores: variante I
7
Problema de los productores y consumidores: variante I
procedure productor()
procedure consumidor()
count = 0
repeat
repeat
if (count == 0) then
producir();
esperar()
guardar();
end if
count ++;
tomar();
if (count==1) then
count--;
despertar(consumidor);
consumir();
end if
until False
until False
end procedure
end procedure
8
Problema de los productores y consumidores: variante I
Problema 1
9
Problema de los productores y consumidores: variante I
Problema 2
10
Problema de los productores y consumidores: variante I
11
Problema de los productores y consumidores: variante II
12
Problema de los productores y consumidores: variante II
13
Problema de los productores y consumidores: variante III
14
Problema de los productores y consumidores: variante III
16
Problema de los lectores y escritores: variante I
Motivación
17
Problema de los lectores y escritores: variante I
procedure Lector()
repeat
INIT(E,1); ▷ Mutex acceso P(mL);
INIT(mL,1); ▷ Mutex #lectores cantLect := cantLect + 1;
cantLect = 0; if cantLect = 1 then
P(E); ▷ Acceso al recurso
end if
procedure Escritor() V(mL);
repeat leer();
P(E); P(mL);
escribir(); cantLect := cantLect - 1;
V(E); if cantLect = 0 then
until False V(E);
end procedure end if
V(mL);
until False
end procedure 18
Problema de los lectores y escritores: variante I
19
Problema de los lectores y escritores: variante II
20
Problema de los lectores y escritores: variante II
procedure Lector()
repeat
P(try);
cantLect := cantLect - 1;
P(mL);
if cantLect = 0 then
cantLect := cantLect + 1;
V(E);
if cantLect = 1 then
end if
P(E);
V(mL);
end if
until False
V(mL);
end procedure
V(try);
leer();
P(mL);
22
Problema de los filósofos
comensales
Problema de los filósofos comensales
Problema:
24
Problema de los filósofos comensales: soluciones
Soluciones:
25
Problema de los filósofos comensales: solución