Está en la página 1de 4
 
El algoritmo de Dekker es un algoritmo de programación concurrente para exclusión mutua, que permite a dos procesos o hilos de ejecución compartir un recurso sin conflictos. Fue uno de los primeros algoritmos de exclusión mutua inventados, implementado por Edsger Dijkstra. Si ambos procesos intentan acceder a la sección crtica simult!neamente, el algoritmo elige un proceso seg"n una variable de turno. Si el otro proceso est! ejecutando en su sección crtica, deber! esperar su finali#ación.Existen cinco versiones del algoritmo Dekker, teniendo ciertos fallos los primeros cuatro. $a versión % es la que trabaja m!s eficientemente, siendo una combinación de la & ' la (.
 
)rimer algoritmo
*aranti#a la exclusión mutua, pero su desventaja es que acopla los procesos fuertemente, esto significa que los procesos lentos atrasan a los procesos r!pidos. 
PROGRAMA UNO; Variables turno: Entero;Inicialización turno = 1;
 
Repeat Hace_Cosas(); While turno =2 Do; REGION_CRITIC(); turno = 2; Hace_!as_cosas(); "ntil #inRepeat Hace_Cosas(); While turno = $ Do; REGION_CRITIC(); turno = $; Hace_!as_cosas(); "ntil #in
Segundo algoritmo
)roblema interbloqueo. +o existe la alternancia, aunque ambos procesos caen a un mismo estado ' nunca salen de ah.
%ROGR& DO';ariales %$*E+ %2*E, -ool;Iniciali.aci/n %$*E = 0alse; %2*E = 0alse;
Repeat Hace_Cosas(); %$*E = true; While %2*E Do; Repeat Hace_Cosas(); %2*E = true; While %$*E Do;
 
 REGION_CRITIC(); %$*E = #alse; Hace_!as_cosas(); "ntil #in REGION_CRITIC(); %2*E = #alse; Hace_!as_cosas(); "ntil #in
 
ercer algoritmo
-olisión región crtica no garanti#a la exclusión mutua. Este algoritmo no evita que dos procesos puedan acceder al mismo tiempo a la región crtica.
 
PROGRAMA TRE; Variables P1A! P"A: #ool;Inicialización P1A = $alse; P"A = $alse;
Repeat Hace_Cosas(); While %2 Do; %$ = true; REGION_CRITIC(); %$ = #alse; Hace_!as_cosas(); "ntil #inRepeat Hace_Cosas(); While %$ Do; %2 = true; REGION_CRITIC (); %2 = #alse; Hace_!as_cosas(); "ntil #in
-uarto algoritmo
)ostergación indefinida. unque los procesos no est!n en interbloqueo, un proceso o varios se quedan esperando a que suceda un evento que tal ve# nunca suceda.
 
PROGRAMA %UATRO; Variables P1&E! P"&E: #ool;Inicialización P1&E = $alse; P"&E = $alse;
Repeat Hace_Cosas(); %$*E = true; While %2*E Do -e1in Repeat Hace_Cosas (); %$*E = true; While %2*E Do
 
 %$*E = 0alse; Dela (ran3o!()); %$*E = true; en3; REGION_CRITIC(); %$*E = #alse; Hace_!as_cosas(); "ntil #in -e1in %2*E = 0alse; Dela (ran3o!()); %2*E = true; en3; REGION_CRITIC(); %2*E = #alse; Hace_!as_cosas(); "ntil #in
 
/uinto lgoritmo
El quinto algoritmo de Dekker es la versión optimi#ada ' que no presenta problemas como las cuatro versiones anteriores, para su estructuración se hace unacombinación de dos algoritmos de acuerdo al orden de prioridad de desempe0o ' funcionamiento de las cuatro versiones conocidas.
PROGRAMA %IN%O;
 Variables P1&E! P"&E: #ool; turno: Entero;Inicialización P1&E = $alse; P"&E = $alse; turno = 1;
Repeat Hace_Cosas(); %$*E = true; While %2*E Do -e1in i0(turno = 2) -e1in %$*E = 0alse; Dela (ran3o!()); %$*E = true; en3; en3; REGION_CRITIC(); turno = 2; %$*E = #alse; Hace_!as_cosas(); "ntil #inRepeat Hace_Cosas(); %2*E = true; While %$*E Do -e1in i0(turno = $) -e1in %2*E = 0alse; Dela (ran3o!()); %2*E = true; en3; en3; REGION_CRITIC(); turno = $; %2*E = #alse; Hace_!as_cosas();
576648e32a3d8b82ca71961b7a986505