You are on page 1of 4

Programación Concurrente

Algoritmo de Dekker.
La exclusión mutua la podríamos definir como una operación de procesos concurrentes (comunicación requerida entre dos o más procesos), y que tiene la capacidad de prohibir a los demás procesos realizar una acción cuando un proceso haya obtenido el permiso. 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 critica simultáneamente, el algoritmo elige un proceso según un variable turno. Si el otro proceso está ejecutando en su sección critica, deberá esperar su finalización. Existen cinco versiones del algoritmo Dekker, teniendo ciertos fallos en los primeros cuatro. La versión 5 es la que trabaja más eficientemente, siendo una combinación de la 1 y la 4.

Versión 1: Alternancia estricta. Garantiza la exclusión mutua, pero su desventaja es que acopla los procesos fuertemente, eso significa que los procesos lentos atrasan a los procesos rápidos.

Versión 2: Problema interbloqueo. No existe la alternancia, aunque ambos procesos caen a un mismo estado y nunca salen de ahí.

Versión 3: colisión región crítica no garantiza la exclusión mutua. Este algoritmo no evita que dos procesos puedan acceder al mismo tiempo a la región crítica.

Versión 4:

postergación indefinida. Aunque los procesos no están en

interbloqueo, un proceso o varios se quedan esperando a que suceda un evento que tal vez nunca suceda.

regresa Al ciclo y verifica si hay otro proceso que puede entrar entonces Nuevamente se encicla. luego se verifica si hay otros procesos que Puede entrar. el progreso y tiene una espera limitada. si lo hay se entra al ciclo y si es el turno de algún otro Proceso (línea 12 y 34) cambia su estado a ya no poder entrar a la sección Critica y nuevamente verifica si es el turno de algún otro proceso (línea 15 y 37) si lo es se queda enciclado hasta que se da un cambio de turno. este algoritmo es una combinación del algoritmo 1 y 4. • Al salir de la sección critica el proceso cambia su turno. (Línea 20 y 42). . de lo contrario entra a la sección critica. A continuación el pseudocódigo: Algoritmo Descripción Programación Concurrente • Se realiza las tareas iniciales. luego Nuevamente retoma su estado de poder entrar a la sección critica.Programación Concurrente Versión 5: Algoritmo Óptimo. cambia su estado y Realiza sus tareas finales. garantiza la exclusión mutual.

Como actuaría el algoritmo de Dekker para que no hubiera colisiones en la región crítica. .Programación Concurrente Ejemplo: Como actuaría el algoritmo de Dekker teniendo el problema de unos carros en el Siguiente crucero: Suponga que los carros de Cuauhtémoc quieren pasar al mismo tiempo que los de 20 de noviembre.

si los hay se entra en un ciclo para que avancen los carros de Cuauhtémoc. cambia su estado y se aleja del crucero.Programación Concurrente El algoritmo de Dekker declara una bandera para cada proceso. entonces nuevamente se encocla. Antes de poner el semáforo de cuau en verde verifica si hay carros que puedan pasar. si lo es se queda enciclado hasta que se da un cambio de turno y comiencen a avanzar los de Cuauhtémoc. el semáforo se pone en rojo para que los carros de cuau no choquen (sección crítica) y nuevamente verifica si es el turno de los de noviembre. si no conforme quieran pasar los carros. regresa al ciclo y verifica si hay otro carro que quiera pasar. Al salir el carro de la sección crítica cambia su turno. Y declarando una variable turno asignada a 1 (Cuauhtémoc en verde). Repitiéndose el mismo proceso para los carros de 20 de noviembre y alternando el semáforo no en tiempos definidos. en este caso será la bandera cuau_1 y la bandera nov_2. de lo contrario entra a la sección crítica. Indicando que primero pasarán los carros de cuau_1. . pero si hay carros de Noviembre avanzando y es el turno de los de noviembre.