|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--LockedFifo
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
).
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 |
protected static final int DEF_TAILLE
protected int taille
protected int taille_max
protected java.util.LinkedList liste
protected Semaphore sem
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 |
public LockedFifo()
LockedFifo
ayant la taille par défaut.
Ce constructeur est identique à LockedFifo(int)
avec DEF_TAILLE
comme argument.
DEF_TAILLE
,
LockedFifo(int)
public LockedFifo(int taille_max) throws java.lang.IllegalArgumentException
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.
taille_max
- la capacité maximale de la pile FIFO
java.lang.IllegalArgumentException
- Si jamais la valeur passée en argument est < 1.Method Detail |
public java.lang.Object get(java.lang.String nom_proc)
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.
nom_proc
- Le nom du processus voulant accéder à la pile (util pour connaître l'état de
celui-ci).null
aucun message n'est affiché.
put(java.lang.Object)
public java.lang.Object get()
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.
get(java.lang.String)
public int put(java.lang.Object objet)
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.
objet
- la nouvelle objet à rajouter à la pile
get()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |