Class LockedFifo

java.lang.Object
  |
  +--LockedFifo
Direct Known Subclasses:
WebFifo

public class LockedFifo
extends java.lang.Object

Classe générale implémentant une pile FIFO.

Un objet de ce type peut en plus être partagé entre plusieurs processus car chaque accès à la pile (insertion ou suppression) est protégé par un sémaphore qui ne permet qu'à un seul processus à la fois de modifier son état. De plus losrque la pile est vide, les processus tentant d'obtenir un nouvel objet de la pile sont mis en attente jusqu'à ce que la pile soit de nouveau non vide.

Remarque: Cette classe est totalement générale, c'est à dire qu'elle peut être réutilisée telle quelle dans une autre application (à condition toute fois d'importer également dans cette autre application la classe Semaphore).

See Also:
Semaphore

Field Summary
protected static int DEF_TAILLE
          Taille de la pile par défaut
protected  java.util.LinkedList liste
          La pile FIFO est implémentée par une liste (doublement) chainée
protected  Semaphore sem
          Permet des accès concurent à la pile.
protected  int taille
          Taille courante de la pile
protected  int taille_max
          Taille max de la pile
 
Constructor Summary
LockedFifo()
          Construit un nouvel objet LockedFifo ayant la taille par défaut.
LockedFifo(int taille_max)
          Construit un nouvel objet LockedFifo d'une capacité de taille_max.
 
Method Summary
 java.lang.Object get()
          Retourne l'objet en bas de la pile et le supprime de celle-ci.
 java.lang.Object get(java.lang.String nom_proc)
          Retourne l'objet en bas de la pile et le supprime de celle-ci.
 int put(java.lang.Object objet)
          Insére un objet en haut de la pile.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEF_TAILLE

protected static final int DEF_TAILLE
Taille de la pile par défaut

See Also:
Constant Field Values

taille

protected int taille
Taille courante de la pile


taille_max

protected int taille_max
Taille max de la pile


liste

protected java.util.LinkedList liste
La pile FIFO est implémentée par une liste (doublement) chainée


sem

protected Semaphore sem
Permet des accès concurent à la pile.

Ce champ est inutil car le mot clef synchronized joue le même rôle. Il devrait donc être supprimé ultérieurement après vérifications.

Constructor Detail

LockedFifo

public LockedFifo()
Construit un nouvel objet LockedFifo ayant la taille par défaut.

Ce constructeur est identique à LockedFifo(int) avec DEF_TAILLE comme argument.

See Also:
DEF_TAILLE, LockedFifo(int)

LockedFifo

public LockedFifo(int taille_max)
           throws java.lang.IllegalArgumentException
Construit un nouvel objet LockedFifo d'une capacité de taille_max.

Règle le sémaphore pour ne permettre l'acces des sections critiques qu'à un seul processus à la fois.

Parameters:
taille_max - la capacité maximale de la pile FIFO
Throws:
java.lang.IllegalArgumentException - Si jamais la valeur passée en argument est < 1.
Method Detail

get

public java.lang.Object get(java.lang.String nom_proc)
Retourne l'objet en bas de la pile et le supprime de celle-ci.

Si la pile est vide la méthode met en attente tous les processus tentant de récupérer un objet. De plus en cas d'appels concurents à cette méthode ou à int put(java.lang.String), seul un processus à la fois accède effectivement à la pile. Cette précaution permet de garantir la cohérance de la pile car tout accès modifie celle-ci.

Parameters:
nom_proc - Le nom du processus voulant accéder à la pile (util pour connaître l'état de celui-ci).
Si le paramètre vaut null aucun message n'est affiché.
Returns:
L'objet en bas de la pile.
See Also:
put(java.lang.Object)

get

public java.lang.Object get()
Retourne l'objet en bas de la pile et le supprime de celle-ci.

Si la pile est vide la méthode met en attente tous les processus tentant de récupérer un objet. De plus en cas d'appels concurents à cette méthode ou à int put(java.lang.String), seul un processus à la fois accède effectivement à la pile. Cette précaution permet de garantir la cohérance de la pile car tout accès modifie celle-ci.

En fait cette méthode se contente d'appeler get(String) avec null en argument.

Returns:
L'objet en bas de la pile.
See Also:
get(java.lang.String)

put

public int put(java.lang.Object objet)
Insére un objet en haut de la pile.

Si la pile est pleine la méthode ne bloque pas les processus qui voudrait rajouter un nouvel objet. Cette objet est simplement ignorée et le processus en est averti par une valeur de retour de -1. Ce comportement n'est peut-être pas toujours souhaitable, cependant ça l'est dans le cas du crawler et cela est très facilement modifiable en étendant cette classe.

De plus en cas d'appels concurents à cette méthode ou à java.lang.String get(), seul un processus à la fois accède effectivement à la pile. Cette précaution permet de garantir la cohérance de la pile car tout accès modifie celle-ci.

Parameters:
objet - la nouvelle objet à rajouter à la pile
Returns:
0 si l'objet a été insérée correctement, sinon -1.
See Also:
get()