TD2: Add several producers and consumers to exo3.
[TD_SR.git] / TD1 / exo3 / BufferCirc.java
CommitLineData
396bc743
JB
1\r
2\r
3/**\r
4 * implementation du producteur consommateur avec un buffer circulaire\r
5 */\r
6public class BufferCirc {\r
7\r
8 private Object[] tampon;\r
9 private int taille;\r
10 private int prem, der, nbObj;\r
11\r
12\r
13 public BufferCirc (int t) {\r
14 taille = t;\r
15 tampon = new Object[taille];\r
16 prem = 0;\r
17 der = 0;\r
18 nbObj = 0;\r
19 }\r
20\r
21\r
22 public boolean isEmpty() {\r
23 return nbObj == 0;\r
24 }\r
25\r
26\r
27 public boolean isFull() {\r
28 return nbObj == taille;\r
29 }\r
30\r
31\r
32 public synchronized void depose(Object obj) {\r
1180d8d3
JB
33 while(isFull()) {\r
34 try {\r
35 wait();\r
36 }\r
37 catch (InterruptedException e) {}\r
396bc743 38 }\r
1180d8d3
JB
39 nbObj++;\r
40 tampon[prem] = obj;\r
41 prem = (prem + 1) % taille;\r
8084e5eb 42 //System.out.println(Thread.currentThread().getName() + " a depose " + (Integer)obj);\r
1180d8d3 43 notify();\r
396bc743
JB
44 }\r
45\r
46\r
47 public synchronized Object preleve() {\r
1180d8d3
JB
48 while(isEmpty()) {\r
49 try {\r
50 wait();\r
51 }\r
52 catch (InterruptedException e) {}\r
396bc743 53 }\r
1180d8d3
JB
54 Object outObj = null;\r
55 nbObj--;\r
56 outObj = tampon[der];\r
57 der = (der + 1) % taille;\r
8084e5eb 58 //System.out.println(Thread.currentThread().getName() + " a preleve " + (Integer)outObj);\r
1180d8d3 59 notify();\r
396bc743
JB
60 return outObj;\r
61 }\r
62\r
63} // fin class BufferCirc\r