-
Notifications
You must be signed in to change notification settings - Fork 0
/
Semaphore.java
38 lines (31 loc) · 1.09 KB
/
Semaphore.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//FINI
/* NOTE :
Sémaphore : En informatique comportement qui permet l'exclusion mutuelle.
Cette classe se comporte comme une barrière de synchronisation pour empêcher
les threads de poursuivre leur exécution.
Un sémaphore est une boîte contenant des jetons. Le comportement est le suivant:
- Un thread peut directement prendre un jeton dans la case si il ya au moins un.
- Si il n'y a pas de jetons, le thread doit attendre que l'un soit mis.
- Un thread peut mettre autant de jetons qu'il veut dans la boîte.
Le wait agit sur le thread principal et fige tous le mmonde
-> notifyAll relance tous le monde.
*/
class Semaphore {
int nbTokens; // nombre de jetons
public Semaphore(int nbTokens) {
this.nbTokens = nbTokens;
}
public synchronized void put(int nb) {
nbTokens += nb;
notifyAll();
}
public synchronized void get() {
while (nbTokens == 0) {
try {
wait();
}
catch(InterruptedException e) {}
}
nbTokens -= 1;
}
}