La solucin al problema de la exclusin mutua se atribuye al matemtico holands T. Dekker y fue presentada por Dijkstra en 19!. "e utili#a al i$ual %ue en otro al$oritmo llamado &l$oritmo de 'eterson( una )ariable turno %ue sir)e para establecer la prioridad relati)a de los dos procesos( es decir( en caso de conflicto sta )ariable ser)ir para saber( a %uien se le concede el recurso y su actuali#acin se reali#a en la re$in cr*tica( lo %ue e)ita %ue pueda haber interferencias entre los procesos. +xplicaremos la utilidad de este al$oritmo mediante un problema, 1.1 EL PROBLEMA DE LOS ESQUIMALES -ntentaremos una manera de implementar el blo%ueo a una re$in cr*tica mediante el uso de una )ariable compartida en el problema denominado .de los es%uimales/. -remos refinando el al$oritmo de manera %ue cada )ersin de dicho refinamiento presente el tipo de problemas %ue suele sur$ir en la implementacin de la concurrencia entre procesos. +l problema de los es%uimales mostrar el uso de las )ariables compartidas para implementar la exclusin mutua entre dos procesos. La ejecucin concurrente de los procesos la indicaremos mediante la estructura cobe$in0coend. La palabra cobe$in indica el comien#o de la ejecucin concurrente de los procesos %ue se se1alan hasta la palabra coend. La accin de blo%ueo se reali#a con la acti)acin de la )ariable com2n 3indicador4 y la de desblo%ueo con su desacti)acin. 1.5. Primer Intento: ALTERNANCIA -ma$inemos 5 es%uimales y un a$ujero para pescar como recurso compartido. +xiste un i$l2 con un pi#arrn. "olo uno de los es%uimales puede acceder a la )e# al pi#arrn a la )e#. 6uando uno de los es%uimales %uiere acceder al a$ujero para pescar debe consultar si tiene permiso para hacerlo en el pi#arrn( si en el pi#arrn se indica %ue el permiso lo tiene el otro es%uimal espera un tiempo y lo )uel)e a probar de nue)o ms tarde. "i en el pi#arrn se indica %ue tiene permiso( ir a pescar. 7na )e# %ue termine con el a$ujero( ir al pi#arrn y ceder el permiso al otro es%uimal. De manera ms formal la codificacin del al$oritmo es, PROGRAM PrimerIntento; VAR turno [1..2]; PROCEDURE P1; BEGIN REPEAT WHILE turno = 2 DO ; (* pasea *) ****** usa aguero !e pes"a ****** turno #= 2; otras cosas FOREVER END; PROCEDURE P2; BEGIN REPEAT WHILE turno = $ DO ; (* pasea *) ****** usa aguero !e pes"a ****** turno #= $; otras cosas FOREVER END; BEGIN turno : 1 COBEGIN P1; P2 COEND END +l incon)eniente de este al$oritmo es la alternancia obli$ada en el uso del recurso( si uno de los procesos es cancelado mientras usa el recurso nunca podr ceder su uso de nue)o. 1.3. Se!n"o Intento: #ALTA DE E$CLUSION "i$uiendo con el paradi$ma anterior( haremos uso de dos i$l2es con su correspondiente pi#arrn. Los pi#arrones tienen dos indicadores( pescando o 89pescando( cada uno de los pi#arrones corresponden a cada uno de los es%uimales. "i %ueremos hacer uso del a$ujero para pescar deberemos consultar en el pi#arrn del otro es%uimal( si indica %ue est pescando saldremos y esperaremos para )ol)erlo a intentar ms tarde. "i en el pi#arrn pone 89pescando iremos a nuestro pi#arrn y pondremos pescando. 6uando terminemos de usar el a$ujero de pescar iremos a nuestro pi#arrn y pondremos 89pescando. De manera ms formal podr*amos codificar el al$oritmo como, PROGRAM %egun!oIntento; VAR !"#arra1$ !"#arra2: %!&scan'o NO!&scan'o(; PROCEDURE P1; BEGIN REPEAT )*I+E !"#arra2 !&scan'o DO; %, !as&a ,( !"#arra1 : !&scan'o; ,,, usa a-u.&ro '& !&sca ,,, !"#arra1 : NO!&scan'o; otras cosas FOREVER END; PROCEDURE P2; BEGIN REPEAT )*I+E !"#arra1 !&scan'o DO; %, !as&a ,( !"#arra2 : !&scan'o; ,,, usa a-u.&ro '& !&sca ,,, !"#arra2 : NO!&scan'o; otras cosas FOREVER END; BEGIN !"#arra1 : NO!&scan'o; !"#arra2 : NO!&scan'o; COBEGIN P1; P2 COEND END. +ste al$oritmo puede $enerar falta de exclusin mutua si los dos procesos tienen libre el recurso( a la )e# consultan el estado de los oponentes y al comprobar %ue est libre los dos indican estado de uso del recurso y lo usan. 1.%. Ter&er Intento: INTERBLOQUEO 'E()er* In+init*, &hora actuaremos a la in)ersa para tratar de e)itar la falta de exclusin mutua( cuando un proceso %uiera utili#ar el recurso( primero indica %ue %uiere hacerlo y lue$o espera a %ue est libre. De manera ms formal podr*amos codificar el al$oritmo como, PROGRA/ T&rc&rInt&nto; VAR !"#arra1$ !"#arra2: %!&scan'o NO!&scan'o(; PROCEDURE P1; BEGIN REPEAT !"#arra1 : !&scan'o; )*I+E !"#arra2 !&scan'o DO; %, !as&a ,( ,,, usa &0 a-u.&ro '& !&sca ,,, !"#arra1 : NO!&scan'o; otras cosas FOREVER END; PROCEDURE P2; BEGIN REPEAT !"#arra2 : !&scan'o; )*I+E !"#arra1 !&scan'o DO; %, !as&a ,( ,,, usa &0 a-u.&ro '& !&sca ,,, !"#arra2 : NO!&scan'o; otras cosas FOREVER END; BEGIN !"#arra1 : NO!&scan'o; !"#arra2 : NO!&scan'o; COBEGIN P1; P2 COEND END. +n el caso %ue los dos es%uimales estn sin pescar 389pescando4 y los dos pretendan acceder al a$ujero al mismo instante( los dos acti)arn en su pi#arrn el estado de intencin de pescar 3pescando4( al ir a consultar la pi#arra del oponente comprobarn %ue est pescando 3o en intencin de hacerlo4( en este caso nin$uno de los dos es%uimales podr acceder al recurso ni podr cambiar su estado. :emos lle$ado a un estado de exclusin mutua 3los dos procesos %uieren acceder al mismo recurso( pero para %ue este les sea concedido los dos procesos deben reali#ar una accin %ue depende mutuamente de la accin del oponente para poderse reali#ar4. 1.-. C!*rto Intento: ESPERA IN#INITA 'ara solucionar el problema anterior a1adiremos el trato de cortes*a( si un proceso )e %ue su oponente %uiere hacer uso del recurso( se lo cede. De manera ms formal podr*amos codificar el al$oritmo como, VAR !"#arra1$ !"#arra2: %!&scan'o$ NO!&scan'o(; PROCEDURE P1; BEGIN REPEAT !"#arra1 : !&scan'o; )*I+E !"#arra2 !&scan'o DO BEGIN %, trata1"&nto '& cort&s2a ,( !"#arra1 : NO!&scan'o; %, 'at& una 3u&0ta ,( !"#arra1 : !&scan'o END; ,,, usa &0 a-u.&ro '& !&sca ,,, !"#arra1 : NO!&scan'o; otras cosas FOREVER END; PROCEDURE P2; BEGIN REPEAT !"#arra2 : !&scan'o; )*I+E !"#arra1 !&scan'o DO BEGIN %, trata1"&nto '& cort&s2a ,( !"#arra2 : NO!&scan'o; %, 'at& una 3u&0ta ,( !"#arra2 : !&scan'o END; ,,, usa &0 a-u.&ro '& !&sca ,,, !"#arra2 : NO!&scan'o; otras cosas FOREVER END;
BEGIN !"#arra1 : NO!&scan'o; !"#arra2 : NO!&scan'o; COBEGIN P1; P2 COEND END. +ste tratamiento de cortes*a puede conducir a %ue los procesos se %ueden de manera indefinida cedindose mutuamente el paso. +sta solucin no ase$ura %ue se acceda al recurso en un tiempo finito. 1. Q!into Intento: ALGORITMO DE DEKKER De manera formal la codificacin del al$oritmo es, PROGRAMA A&goritmoDeDe''er; VAR !"#arra1$ !"#arra1: %!&scan'o$ NO!&scan'o(; Turno:[1..2]; PROCEDURE P1; BEGIN REPEAT !"#arra1 : !&scan'o )*I+E !"#arra2 !&scan'o DO IF turno 2 T*EN BEGIN %, trata1"&nto '& cort&s2a ,( !"#arra1 : NO!&scan'o; )*I+E turno 2 DO; %, 'at& una 3u&0ta ,( !"#arra1 : !&scan'o END ,,, usa &0 a-u.&ro '& !&sca ,,, turno : 2; !"#arra1 : NO!&scan'o; otras cosas FOREVER END; PROCEDURE P2; BEGIN REPEAT !"#arra2 : !&scan'o )*I+E !"#arra1 !&scan'o DO IF turno 1 T*EN BEGIN %, trata1"&nto '& cort&s2a ,( !"#arra2 : NO!&scan'o; )*I+E turno 1 DO; %, 'at& una 3u&0ta ,( P"#arra2 : !&scan'o END ,,, usa &0 a-u.&ro '& !&sca ,,, turno : 1; !"#arra2 : NO!&scan'o; otras cosas FOREVER END;
BEGIN !"#arra1 : NO!&scan'o; !"#arra2 : NO!&scan'o; turno : 1; COBEGIN P1; P2 COEND END. Este algoritmo asegura la exclusin mutua y est libre de interbloqueos.