TD1: Initial commit of exercice 3 code.
[TD_SR.git] / TD1 / exo3 / BufferCirc.java
1
2
3 /**
4 * implementation du producteur consommateur avec un buffer circulaire
5 */
6 public class BufferCirc {
7
8 private Object[] tampon;
9 private int taille;
10 private int prem, der, nbObj;
11
12
13 public BufferCirc (int t) {
14 taille = t;
15 tampon = new Object[taille];
16 prem = 0;
17 der = 0;
18 nbObj = 0;
19 }
20
21
22 public boolean isEmpty() {
23 return nbObj == 0;
24 }
25
26
27 public boolean isFull() {
28 return nbObj == taille;
29 }
30
31
32 public synchronized void depose(Object obj) {
33 if (!isFull()) {
34 nbObj++;
35 tampon[prem] = obj;
36 prem = (prem + 1) % taille;
37 System.out.println(Thread.currentThread().getName() + " a depose " + (Integer)obj);
38 } else {
39 System.out.println("Buffer plein pour " + Thread.currentThread().getName());
40 }
41 }
42
43
44 public synchronized Object preleve() {
45 Object outObj = null;
46 if (isEmpty()) {
47 nbObj--;
48 outObj = tampon[der];
49 der = (der + 1) % taille;
50 System.out.println(Thread.currentThread().getName() + " a preleve " + (Integer)outObj);
51 } else {
52 System.out.println("Buffer vide pour " + Thread.currentThread().getName());
53 }
54 return outObj;
55 }
56
57 } // fin class BufferCirc