TP-systemes-concurrents/TP1/PCA.java

49 lines
1.5 KiB
Java
Raw Normal View History

2023-06-21 18:19:26 +00:00
// v0.2, 17/9/21 (PM)
/* Bonus (?) : schéma producteur-consommateur
La classe PCA suivante est une implémentation du schéma
producteur/consommateur, pour un unique producteur et un unique consommateur. L'algorithme
semble correct, et pourtant... le test montre un comportement incorrect. Expliquez et rectifiez le code en conséquence.
*/
public class PCA {
static final int N = 10;
static int dépôt = 0;
static int retrait = 0;
static int[] tampon = new int[N];
public static void main(String[] args) {
Thread t1 = new Thread(new Producteur());
Thread t2 = new Thread(new Consommateur());
t1.start();
t2.start();
}
}
class Producteur implements Runnable {
// dépose des suites de N entiers identiques, en incrémentant la valeur déposée à chaque nouvelle suite
public void run() {
for (;;) {
System.out.println("production...");
while (PCA.dépôt-PCA.retrait>=PCA.N) {}
System.out.println("PCA.dépôt "+ PCA.dépôt/PCA.N);
PCA.tampon[PCA.dépôt%PCA.N] = PCA.dépôt/PCA.N;
PCA.dépôt++;
System.out.println("fait");
}
}
}
class Consommateur implements Runnable {
public void run() {
int item;
for (;;) {
System.out.println("repos...");
while (PCA.dépôt<=PCA.retrait) {}
System.out.println("PCA.retrait");
item=PCA.tampon[PCA.retrait%PCA.N];
PCA.retrait++;
System.out.println("consommation "+item);
}
}
}