public void simu(int id, int idVoiture, int[][] classement, Mutex sem) { //initialisation des variables Random rand = new Random(); Circuit circuit = new Circuit(); Console.WriteLine("initialisation du sémaphore"); Console.WriteLine("initialisation de la voiture " + id); Voiture voiture = new Voiture(id, idVoiture, 2, 0); Console.WriteLine("lancement de la course"); Course(7, voiture, sem, classement); }
/** simule le deroulement de l'entierete de la course * * @param int tours le nombre de tours que comporte la course * @param voiture* mavoiture pointeur vers l'emplacement memoire de la voiture * simulee par le processus * @param Mutex sem mutex qui permet de synchroniser les données * */ public void Course(int tours, Voiture maVoiture, Mutex sem, int[][] classement) { int temps1 = 0; int temps2 = -1; maVoiture.tours += 1; do { //Console.WriteLine("\ntour : " + tours); //effectue un tour puis incremente le temps total que la voiture aura passe en course temps1 = tourCourse(maVoiture, maVoiture.tours, tours, sem, classement); temps2 += temps1; if (temps1 == 0) { maVoiture.Ready = -1; return; } maVoiture.tours += 1; //verifie si la voiture a fait un meilleur temps que ce qu'elle avait precedemment fait if (maVoiture.meilleurTemps > temps1 || maVoiture.meilleurTemps == 0) { maVoiture.meilleurTemps = temps1; //sauvegarde la valeur en memoire partagee if (!maVoiture.changeOrdre) { maVoiture.changeOrdre = true; //indique que le temps de la voiture a changeOrdre } } //Console.WriteLine("\ntemps du tour: " + temps1 +"| Voiture : "+ maVoiture.Id); if (maVoiture.tours > tours) { classement[maVoiture.Id][5] = 0; } } while (maVoiture.tours < tours && temps1 != 0 || maVoiture.changeOrdre); maVoiture.Ready = -1; classement[maVoiture.Id][5] = 0; }
public void essaiLibreQuali(int chrono, Voiture maVoiture, Mutex sem, int[][] classement) { int temps1 = 0; int temps2 = 0; maVoiture.tours += 1; do { temps1 = tour(maVoiture, maVoiture.tours, sem, classement); temps2 += temps1; if (temps1 == 0) { maVoiture.Ready = -1; return; } maVoiture.tours += 1; //verifie si la voiture a fait un meilleur temps que ce qu'elle avait precedemment fait if (maVoiture.meilleurTemps > temps1 || maVoiture.meilleurTemps == 0) { maVoiture.meilleurTemps = temps1; //sauvegarde la valeur en memoire partagee if (!maVoiture.changeOrdre) { maVoiture.changeOrdre = true; //indique que le temps de la voiture a changeOrdre } } Console.WriteLine("\ntemps du tour: " + temps1 + "| Voiture : " + maVoiture.idVoiture); if (maVoiture.tours > 2500) { classement[maVoiture.Id][5] = 0; } } while (temps2 < chrono && temps1 != 0); maVoiture.Ready = -1; classement[maVoiture.Id][5] = 0; }
/** remets les secteurs de la voiture a zero. Cela permet de simuler la fin d'un tour * sur le circuit * * @param Voiture maVoiture remet à zero les temps de secteur de la voiture * */ void refreshSecteurs(Voiture maVoiture) { maVoiture.tempSecteur1 = 0; maVoiture.tempSecteur2 = 0; maVoiture.tempSecteur3 = 0; }