[Java] Programmation concurrente et BlockingQueues
Programmation concurrente et BlockingQueues [Java] - Java - Programmation
MarshPosté le 27-05-2006 à 16:23:18
Bonjour,
Je travaille actuellement sur une application multithreads, l'algorithme de déclenchement est, grosso-modo le suivant : . Le resultat du travail de chaque process est stocké dans une Map . Tous les process ont le meme comportement
Comportement : --Si le process est autorisé à générer des process fils ---- Générer n fils suivant le meme comportement et leur donner un lien sur la Map ---- Tant que les n fils n'ont pas terminé ------ Attendre ---- Ecrire le resultat de traitement local dans la Map ---- Se terminer
Le but est içi de faire collaborer plusieurs processus dans un travail réparti. Je bloque cependant sur la manière que va utiliser le process FILS pour informer son PERE qu'il vient de terminer son travail.
J'ai essayé de remplacer la boucle d'attente par un wait() avec un moniteur sur l'objet this, mais je me suis trouvé confronté a un problème assez connu : les signaux se perdent... Exemple :
P génere F1 et F2 P attend (il doit rester 2 fils actifs) F1 fait son job F2 fait son job F1 envoie un notify F2 envoie un notify P capte un signal P attend (il doit rester 1 fils actif) ... Blocage
Je suis en train d'explorer la piste des BlockingQueues pour faire transiter un message entre chaque fils et un pere , mais je me demande s'il n'existe pas une procédure plus simple.
Marsh Posté le 27-05-2006 à 16:23:18
Bonjour,
Je travaille actuellement sur une application multithreads, l'algorithme de déclenchement est, grosso-modo le suivant :
. Le resultat du travail de chaque process est stocké dans une Map
. Tous les process ont le meme comportement
Comportement :
--Si le process est autorisé à générer des process fils
---- Générer n fils suivant le meme comportement et leur donner un lien sur la Map
---- Tant que les n fils n'ont pas terminé
------ Attendre
---- Ecrire le resultat de traitement local dans la Map
---- Se terminer
Le but est içi de faire collaborer plusieurs processus dans un travail réparti. Je bloque cependant sur la manière que va utiliser le process FILS pour informer son PERE qu'il vient de terminer son travail.
J'ai essayé de remplacer la boucle d'attente par un wait() avec un moniteur sur l'objet this, mais je me suis trouvé confronté a un problème assez connu : les signaux se perdent...
Exemple :
P génere F1 et F2
P attend (il doit rester 2 fils actifs)
F1 fait son job
F2 fait son job
F1 envoie un notify
F2 envoie un notify
P capte un signal
P attend (il doit rester 1 fils actif)
... Blocage
Je suis en train d'explorer la piste des BlockingQueues pour faire transiter un message entre chaque fils et un pere , mais je me demande s'il n'existe pas une procédure plus simple.
Merci d'avance pour le coup de pouçe.