Алгоритм Деккера

bolean flag[2];

snt turn;

 

void P0(){

  while(True)

  {

   flag[0]= true;

   while(Flag[1])

    if turn == 1

     {

      flag[0] = false;

      while (turn == 1)

       /* wait */;

       flag[0] = true;

       // критическая секция     

       turn = 1; 

       flag[0] = false;

       // ocтальной код      

      }

  }

}

 

void P(1){

  while(True)

  {

   flag[1]= true;

   while(Flag[0])

    if turn == 0

     {

      flag[0] = false;

      while (turn == 0)

       /* wait */;

      flag[1] = true;

       // критическая секция     

       turn = 0; 

       flag[1] = false;

       // ocтальной код      

      }

  }

void main(){

      flag[0] = false;

      flag[1] = false;

 turn = 0; 

     parbegin(P0, P1)

}

 

 

Алгоритм Петерсона

bolean flag[2];

іnt turn;

 

void P0(){

  while(True)

  {

    flag[0] = true;

    turn = 1;

    while(flag[1])&&(turn == 1)

    /* wait */;

    /* критическая секция */

    flag[0] = false;

    /* остальной код */

  }

}

 

void P1(){

  while(True)

  {

    flag[1] = true;

    turn = 0;

    while(flag[0])&&(turn == 0)

    /* wait */;

    /* критическая секция */

    flag[1] = false;

    /* остальной код */

  }

}

 

void main(){

      flag[0] = false;

      flag[1] = false;

      parbegin(P0, P1)

}

Остання зміна: вівторок 24 березня 2020 11:59 AM