Example #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);
                         }
                     }
                 }
             }
         }
     }
 }
Example #2
0
        // Trouver l'instruction du processus de la barrière précédante (pour éviter les interblocages)
        private int trouverInstructionPrecedante(Processus processus)
        {
            int instructionPrec = 1;

            foreach (KeyValuePair <int, int> kvp in lstBarrieres[lstBarrieres.Count - 1].barriere)
            {
                if (kvp.Key == processus.getPID())
                {
                    instructionPrec = kvp.Value;
                }
            }
            return(instructionPrec);
        }
        // Supprimer une barrière si elle contenait le processus supprimé
        private void supBarriere(Processus processus)
        {
            bool processusSupprime = false;

            foreach (Barriere barriere in lstBarrieres)
            {
                foreach (KeyValuePair <int, int> kvp in barriere.getBarriere())
                {
                    if (processus.getPID() == kvp.Key)
                    {
                        lstBarrieres.Remove(lstBarrieres.Find(cetteBarriere => cetteBarriere.getID() == barriere.getID()));
                        processusSupprime = true;
                        break;
                    }
                }
                if (processusSupprime == true)
                {
                    break;
                }
            }
        }