TP-systemes-concurrents/TP4/ProcessusRedacteur.java

57 lines
1.8 KiB
Java
Raw Normal View History

2023-06-21 18:19:26 +00:00
// Time-stamp: <02 Apr 2008 16:27 queinnec@enseeiht.fr>
// v1 (10/14, PM) : Ajout d'une petite temporisation sur les transitions critiques (accès)
// pour éviter un décalage entre l'état de l'application et l'état des objets grqphiques
// au moment du test de cohérence réalisé par l'IHM graphique. Pas très glorieux, mais
// a priori inévitable, à partir du moment où l'affichage et la simulation sont découplés
import Synchro.Simulateur;
import Synchro.ProcId;
public class ProcessusRedacteur extends Thread
{
private int no;
private LectRed lr;
private Simulateur simu;
private IHMLectRed ihm;
private int SYNCHRO_AFFICHAGE = 10;
public ProcessusRedacteur(LectRed lr, Simulateur simu, IHMLectRed ihm) {
super (simu.getThreadGroup(), "");
this.no = no;
this.lr = lr;
this.simu = simu;
this.ihm = ihm;
}
public void run() {
setName ("Redacteur-"+ProcId.getSelf());
ihm.ajouterRedacteur();
try {
simu.sleep (0, Main.MaxDelayERien/2);
while (true) {
// demande à écrire
ihm.changerEtat (LectRedEtat.Redacteur_Demande);
lr.demanderEcriture ();
Thread.sleep(SYNCHRO_AFFICHAGE);
ihm.changerEtat (LectRedEtat.Redacteur_Ecrit);
// utilise
simu.sleep (Main.MinDelayEcrit, Main.MaxDelayEcrit);
lr.terminerEcriture();
ihm.changerEtat (LectRedEtat.Redacteur_Rien);
// pense
simu.sleep (Main.MinDelayERien, Main.MaxDelayERien);
}
} catch (Synchro.Suicide e) {
// nothing
} catch (InterruptedException e2) {
// nothing
} finally {
ihm.enlever();
}
}
}