Показать сообщение отдельно
Старый 07.12.2001, 22:13
Countach вне форума Посмотреть профиль Отправить личное сообщение для Countach Найти все сообщения от Countach
  № 1  
Countach
 
Аватар для Countach

Регистрация: Mar 2001
Адрес: Cyprus, Nicosia
Сообщений: 795
Отправить сообщение для Countach с помощью ICQ
По умолчанию Блин не слишком ли нагружено для флешки?? :(

Есть прога, не законченая, но алгоритм виден
Код:
//##### BANKER'S ALGORITHM SOURCE CODE ##### 

//Declaration of data structures
NoResources=6;
NoProcesses=5;

//total number of resources
AvailI = new Array();
AvailI [NoResources];
AvCons = new Array();
AvCons [4,5,16,2,12,64];

//fill up the array for the number of max resources
MaxI=new Array();
for (i=0; i<NoProcesses; i++) {
MaxI[i]=new Array();
   for (j=0; j<NoResources; j++) {
      MaxI[i][j]=Random(AvailI[j]);
   }
}

//fill up the array with the allocated resources
AllocI=new Array();
for (i=0; i<NoProcesses; i++) {
AllocI[i]=new Array();
   for (j=0; j<NoResources; j++) {
      AllocI[i][j]=Random(Max[j][i]);
   }
}

//fill up the array with how many resources each process may request
NeedI=new Array();
for (i=0; i<NoProcesses; i++) {
NeedI[i]=new Array();
   for (j=0; j<NoResources; j++) {
      NeedI[j][i]=MaxI[j][i]-AllocI[j][i];
   }
}



//Main
AvailI=AvCons; //initialization of available resources in the system

// Request
Row=Random(NoProcesses);
Column=Random(NoResources);
Cell=Random(Need[Row][Column]);
Request=Random(Cell); 

if ((Request<=NeedI[Row][Column]) && (Request<=AvailI[Column])) {
   AvailI[Column]=AvailI[Column]-Request;
   AllocI[Row][Column]=AllocI[Row][Column]+Request;
   NeedI[Row][Column]=NeedI[Row][Column]-Request;
}

Finish = new Array();
Finish [NoResources];
for (i=0; i<NoResources; i++) {
   Finish[i]=false;
}

Status = new Array();
Status [NoProcesses];
for (i=0; i<NoProcesses; i++) {
   Status[i]=false;
}

counter=0;
precounter=0;
repeat
   for (Row=0; Row<NoProcesses; Row++) {
      for (Column=0; Column<NoResources; Column++) {
         if ((NeedI[Row][Column]<=AvailI[Column]) && (Status[Row]==false)) {
            AvailI[Column]+=AllocI[Row][Column];
            Finish[Column]=True;
         }
      }
      Pid=true;
      for(Column=0; Column<NoResources; Column++) {
         if (Finish[Column]==false) {
            Pid=false;
         }
      }
      Status[Row]=Pid;
      if (Pid==true) {
         counter++;
      }
   }
   Pst=true;
   for (Row=0; Row<NoProcesses; Row++) {
      if (Status[Row]==false) {
         Pst=false;
      }
   }
   if Pst==true {
      gotoAndPlay ("SAFE");
   }
   Signal=false;
   if counter>precounter {
      precounter=counter;
      signal=true;
   }
until signal==false;
// You are in the UNSAFE state
Блин просто на флешке не превычно такое видеть, кто-нить еще этим страдал )
__________________
Кто рано встает, тому... спать весь день хочется.