コード例 #1
0
 // Mettre en attente un processus s'il doit attendre à la barrière
 private void attenteSiBarriere(Processus processus)
 {
     foreach (Barriere barriere in lstBarrieres)
     {
         if (barriere.getBarrierePassee() == false)
         {
             foreach (KeyValuePair <int, int> kvp in barriere.getBarriere())
             {
                 if (processus.getPID() == kvp.Key)
                 {
                     if (processus.getNbInstructionsExecutees() == kvp.Value)
                     {
                         processus.mettreEnAttenteBarriere();
                         processus.setEtat(Enums.etatProcessus.Pret);
                         foreach (Thread thread in processus.getThreads())
                         {
                             thread.setEtat(Enums.etatThread.Pret);
                             updateInfoThread(processus);
                         }
                     }
                 }
             }
         }
     }
 }
コード例 #2
0
 // Exécution d'un calcul
 private void executerCalcul(Instruction instruction, Thread thread, Processus processus)
 {
     processus.setEtat(Enums.etatProcessus.Actif);
     thread.setEtat(Enums.etatThread.Actif);
     instruction.Etat = Enums.etatInstruction.EnCours;
     decrementerTempsESBloque();
     updateInfoThread(processus);
     updateCouleur();
     sleep();
     instruction.Etat = Enums.etatInstruction.Termine;
     updateCouleur();
 }
コード例 #3
0
 // Exécution d'une E/S
 private List <Processus> executerES(Instruction instruction, Thread thread, Processus processus)
 {
     instruction.Etat = Enums.etatInstruction.EnCours;
     processus.setEtat(Enums.etatProcessus.Bloque);
     thread.setEtat(Enums.etatThread.Bloque);
     updateInfoThread(processus);
     updateCouleur();
     decrementerTempsESBloque();
     sleep();
     if (executePCA == true)
     {
         return(OrderListProcessusPCA(lstProcessus));
     }
     else
     {
         return(OrderListProcessusPP(lstProcessus));
     }
 }