Programacion concurrente

Iniciado por omykron, 23 Enero 2007, 07:47 AM

0 Miembros y 1 Visitante están viendo este tema.

omykron

Wenass! asía ya tiempo que no venia por aqui pero veo que sigue conservando su prestigio alli donde navegue ... ::)

Weno, tengo un problemilla a ver si alguien me puede echar un cable:

Considerar la siguiente modificacion de Peterson para 2 procesos para que se pueda implementar la exclusion mutua de N procesos:
Di si la solución es correcta. En caso contrario propon, si es posible las modificaciones necesarias para que lo sea.

int Turno=0;
BOOLEAN QuiereEntrar[N] = {FALSE,...,FALSE};

void Proceso(int i){
   extern BOOLEAN QuiereEntrar[N];
   extern int Turno;
   int k;

   while(TRUE){
      QuiereEntrar[i] = TRUE;
      Turno = (i+1) % N;
      for(k=0;k<N;k++)
         while(QuiereEntrar[k] && Turno==k);

      /*sección Crítica*/
      QuiereEntrar[i] = FALSE;
      /*Sección residual*/
   }
}

:huh:
Se que el problema está en la variable Turno, ya que tal y como está tendriamos otra sección crítica ahí mismo, ya que puede llegar otro proceso y alterar la variable turno. Por tanto ...
Pense en convertir a la variable Turno en un array... pero no se si voy por buen camino ... me podeis ayudar¿?

Gracias !! ;D
Fortis cadere, cedere non potest
-/OmYkRoN/-