Algoritmo de Primer Intento

Como primera aproximaci�n, se utiliza una variable compartida llamada turno. Esta puede tomar los valores 1 y 0. Cada proceso ingresa a la secci�n cr�tica s�lo si el valor de turno es el que le corresponde a �l (es decir, el proceso P0 ingresa si vale 0, y el P1 ingresa s�lo si vale 1). Cuando el proceso sale de su secci�n cr�tica, pone el n�mero del otro proceso en la variable, cedi�ndole el pr�ximo turno.

Supongamos que turno comienza en 0. Cuando P0 llega a su secci�n cr�tica, se ejecuta. Si P1 tambi�n llega, queda esperando en un ciclo condicionado a que la variable tome el valor 1. As�, se garantiza la exclusi�n mutua.

Sin embargo, puede ocurrir que la velocidad de cada uno de ellos sea muy distinta; o que la secci�n no cr�tica de uno sea muy larga en relaci�n a la del otro, demorando en volver a entrar a su secci�n cr�tica y -por lo tanto- en devolver el turno al otro proceso; esto obligar�a a demorarse al proceso m�s r�pido. Peor a�n, puede que un proceso se interrumpa o falle, sin tener oportunidad de cambiar nuevamente el valor de turno, lo que llevar�a al otro proceso a esperar eternamente (cayendo en la inanici�n).

Este algoritmo obliga a que acceda exactamente uno de los procesos cada vez, lo que se conoce como alternancia estricta.

     
class P0 extends Thread{
public void run(){
	while (true)
		{
		while (turno!=0){
		}/* seccion cr�tica */
	turno=1;
		}
}
     
  


Hosted by www.Geocities.ws

1