[C] Thread, pause et liste

Fermé
boelraty Messages postés 2 Date d'inscription mercredi 30 juillet 2008 Statut Membre Dernière intervention 30 juillet 2008 - 30 juil. 2008 à 07:25
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 30 juil. 2008 à 09:11
Bonjour,

Je vous explique brièvement mon problème. J'ai deux threads dans mon programme, un qui sauve des données dans une double liste chaînée : read (c'est à dire qu'il y a un pointeur sur l'élément suivant et sur le précédent, pour pouvoir parcourir la liste dans les deux sens) et un autre qui enregistre ces données dans un fichier BMP : write.

Ma liste ressemble à ça (à plusieurs moments du programme) :
1) NULL
2) NULL - 1
3) NULL - 1 - 2 ... - 10

Dans le thread write, il doit sauver les données dans les fichiers dans l'ordre, c'est à dire 1 puis 2 puis 3

Le problème c'est que je ne peux pas sauvegarder les données d'un élément avant qu'il soit créé et la création du fichier va plus vite que la création des éléments de la liste (mais pas tout le temps)

Le thread read doit tourner en continue pas de pause envisageable.

J'aimerais donc pouvoir faire une pause dans mon thread write pour qu'il attente que l'élément de la liste contienne bien les données que je veux. En gros read tourne en permanence et write recommence à écrire quand l'enregistrement du nouvel élément est fini. Mais il ne faut pas que à chaque nouvel élément je crée un thread pour écrire le fichier. C'est vraiment deux thread à part, un qui lit et un qui écrit et ils tournent depuis le début du programme.

Toute idée est la bienvenue.

Merci pour vos réponses
A voir également:

1 réponse

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
30 juil. 2008 à 09:11
Salut.
Je viens d'intervenir sur un message traitant de thread et un contributeur a parlé de sémaphore pour synchroniser les thread. Je ne sais pas ce que c'est, mais peut être qu'en cherchant dans cette direction tu aura une solution.
Ton write ne peut il pas tester si de nouvelles données ont été écrites ?
1