Encontrar una solucin de software al problema de la
exclusin mutua ha sido un desafio para los investigadores de la ciencia de la computacin desde los aos 60, conduciendo a muchas soluciones falsas. Para ilustrar esto veremos la solucin propuesta por Hyman (1966) la cual tiene inters en contexto educacionales ya que ayuda a clarificar las cualidades de una solucin correcta. Las variables globales C0, C1 y turno deben inicializarse de la siguiente forma: C0 y C1 son inicializadas a restoproceso. Turno es inicializado a 0 o 1. A primera vista este algoritmo parece correcto, sin embargo, se puede dar la siguiente situacin: 1. turno= 0, P1 hace C1 =requiereentrar y cuenta C0 =restoproceso superando la sentencia 1.3 y se para. 2. A continuacin, P0 hace C0 =requiereentrar, encuentra turno=0 y entra en la seccin critica. 3. P1 hace turno=1 y entra tambin en la seccin critica. Algoritmo de Dekker. Es un algoritmo de programacin concurrente para exclusin mutua, que permite a dos procesos o hilos de ejecucin compartir un recurso sin conflictos. Fue uno de los primeros algoritmos de exclusin mutua inventados, implementado por Edsger Dijkstra. Si ambos procesos intentan acceder a la seccin crtica simultneamente, el algoritmo elige un proceso segn una variable de turno. Si el otro proceso est ejecutando en su seccin crtica, deber esperar su finalizacin. Existen cinco versiones del algoritmo Dekker, teniendo ciertos fallos los primeros cuatro. La versin 5 es la que trabaja ms eficientemente, siendo una combinacin de la 1 y la 4. Versin 1:Alternancia estricta. Garantiza la exclusin mutua, pero su desventaja es que acopla los procesos fuertemente, esto significa que los procesos lentos atrasan a los procesos rpidos. Versin 2:Problema interbloqueo. No existe la alternancia, aunque ambos procesos caen a un mismo estado y nunca salen de ah. Versin 3:Colisin regin crtica no garantiza la exclusin mutua. Este algoritmo no evita que dos procesos puedan acceder al mismo tiempo a la regin crtica. Versin 4:Postergacin indefinida. Aunque los procesos no estn en interbloqueo, un proceso o varios se quedan esperando a que suceda un evento que tal vez nunca suceda. Algoritmo de Peterson. El algoritmo de Dekker resuelve el problema de la exclusin mutua para dos procesos pero con un programa complejo, difcil de seguir y de probar sus correcciones. Peterson descubri una forma mas sencilla y elegante de resolver el mencionado problema dando lugar al algoritmo de Peterson. La variable compartidas por loa procesos son similares al algoritmo anterior. Por una parte, cada proceso dispone de su propia variable, a travs de la cual indica su propio estado con respecto a la seccin critica. Cuando esta variable tiene el valor requiereentrar significa que el proceso correspondiente esta dentro o desea entrar en sus seccin critica. Cuando vale restoproceso entonces el proceso no esta ni quiere entrar en su seccin critica, y por otra parte, la variable turno reuelve conflictos de simultaneidad. La sincronizacin de la variable ser la siguiente: C0 = restoproceso; C1 = restoProcso. turno = 0 o 1