Files d'attente et scheduler

Files d'attente et scheduler - Algo - Programmation

Marsh Posté le 17-10-2004 à 13:46:24    

Bonjour,
 
Mon programme met en oeuvre deux files d'attente. Ces deux files offrent une fonction is_empty() (retourne vrai si vide) et une fonction bloquante dequeue() (retourne le premier élément stocké dans la file).
 
Je dispose d'un thread pour traiter ces deux files d'attentes.
 
Comment dois-je organiser ce thread pour optimiser l'utilisation du CPU. de manière à éviter une boucle d'attente bourin genre :

Code :
  1. while( q1.is_empty() && q2.is_empty() );


 
Merci d'avance pour vos conseils.


Message édité par xterminhate le 17-10-2004 à 13:47:53

---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 17-10-2004 à 13:46:24   

Reply

Marsh Posté le 17-10-2004 à 14:14:08    

Au lieu de tester si elles sont vides essayes plutôt de lancer un message dans la fonction d'ajout que tu capteras non ? Enfin j'y connais rien du tout en threads donc bon ;)

Reply

Marsh Posté le 17-10-2004 à 14:16:33    

utilise des mécanismes d'attente passive plutot d'active : condition, événement, mutex, etc

Reply

Marsh Posté le 17-10-2004 à 14:35:46    

Ses files d'attente héritent d'une classe de base Semaphore (appel bloquant de dequeue basé sur une attente passive).  
 
Je suis en train de créer une fonction qui fait la synthèse des sémaphore des files d'attente, de sorte à réaliser une attente passive sur une liste de files d'attente.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 17-10-2004 à 14:46:01    

Alors n'utilise qu'un seul sémaphore pour toutes tes files, et fais une attente qui bloque sur le-dit sémaphore.

Reply

Marsh Posté le 17-10-2004 à 15:02:42    

J'ai plusieurs cas d'utilisation de mes files. Chaque file aura son sémaphore et je fais une fonction amie de la classe file pour réaliser l'attente passive sur plusieurs files.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 17-10-2004 à 16:09:54    

Lam's a écrit :

Alors n'utilise qu'un seul sémaphore pour toutes tes files, et fais une attente qui bloque sur le-dit sémaphore.


 
Finallement, j'opte pour un sémaphore unique utilé en parallèle de mes listes pour simplifier un peu. C'est un peu moins pratique à l'utilisation... enfin, on peut pas tout avoir.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 17-10-2004 à 19:11:08    

Au passage, regarde si la bibliothèque de threads possède un truc genre "conditional variable" sur lequel tu peux faire des "wait" et des "signal" ou "notify". Ca me parait plus adapté à ton cas, même si les sémaphores fonctionnent très bien.
 
Et fais gaffe avec ta fonction "deque()". En C++, deque, ce sont les double-end-queues. Je pense que tu devrais plutôt l'appeller unqueue() ou nextElement()....

Reply

Marsh Posté le 17-10-2004 à 21:09:53    

J'utilise une file d'attente perso qui est thread safe.


---------------
Cordialement, Xterm-in'Hate...
Reply

Marsh Posté le 17-10-2004 à 21:31:39    

Ca, je l'ai bien compris. Mais ta file d'attente perso, fais la utiliser une conditional variable plutôt qu'un sémaphore. Le code que Taz te conseille (sur le topic "Héritage privé" ) s'y plie très bien...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed