Bonjour,
J'ai un système qui me lit des données et qui doit faire un traitement dessus. Ce que j'ai pensé faire, c'est un thread qui s'occupe des la lecture et un thread qui s'occupe du traitement. Comme le traitement peut prendre du temps (Plus que la lecture), j'ai pensé faire une pile FIFO.
Le principe est simple, le thread de lecture ajoute les données au dessus de la pile et le thread de traitement retire les données au fond de la pile.
Un petit schéma :
(les données sont des blocs d'une 50aine d'octet)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 (Lecture des données) -> [data 6] [data 5] - [data 4] | [data 3] > PILE [data 2] | [data 1] - [data 0] -> (traitement des données)
Ainsi, les threads ne doivent pas être synchroniser et la lecture ne doit pas attendre la fin du traitement. Le traitement lui prend des données temps qu'il y en a.
Je pensais mettre aussi un verrou sur la pile et sur les données (Un unité de données peut-être verouiller, ou bien toute la pile carrément). Le problème est que le verrou n'est qu'une simple variable (ma pile est mes unités de données sont des structures) et je ne sais pas si on peut se trouver dans la situation suivant : Les deux threads veulent verouiller la pile en même temps, que se passera-t-il ?
Et je me demande s'il y a d'autre solutions possibles pour faire ça, la mienne n'est sûrement pas la meilleur !
Merci.
T.
Partager