SemaMultiple.java |
package fr.umlv.ji.tcp.server; /** * Classe représentant des sémaphores généralisés, pouvant être * initialisés à un entier positif quelconque et représentant des * compteurs protégés des accès concurrents. */ public class SemaMultiple { private int value; private int max; /** Constructeur du sémaphore initialisé à max. */ public SemaMultiple(int max) { this.max = max; value = max; } /** Méthode permettant de décrémenter le compteur. Si le compteur est déjà à 0, la méthode est bloquante. */ public synchronized void P() throws InterruptedException { while (value == 0) wait(); value--; } /** Méthode permettant d'incrémenter le compteur. Si le compteur est déjà à max, la méthode est sans effet sur le compteur. */ public synchronized void V() { if (value < max) value++; notify(); } }