Synchronisation entre threads

Synchronisation entre threads - C - Programmation

Marsh Posté le 23-12-2008 à 03:16:12    

Bonjour,
 
j'ai un petit soucis dans l'élaboration d'un programme C que je suis en train de faire.
Le principe est de simuler le fonctionnement d'un entrepot qui gère différentes pièces.
 
J'ai mon programme principal qui créée un thread, ce thread créé des pièces de différents type, et envoit ces pièces à 2 machines tour à tour. Jusqu'ici tout va bien.
 
J'ai 2 autres threads, un par machine. Quand une machine reçoit une pièce qu'elle ne peut pas traiter, elle l'a renvoit à l'autre machine.
Chaque machine possède une file de message dans laquelle j'envoit les pièces.
 
Je pense que je m'y suis mal prit au niveau du thread qui génère les pièces, voici le principe que j'utilise:
 
- j'envois toutes les pièces aux différentes machines tour à tour.
- j'envois la même structure dans la file d'attente de chaque machine, dont le m.text est "finish"
 
Ensuite au niveau des threads des machines, j'ai une boucle while qui controle la valeur de m.text si c'est finish ou pas.
 
Au final mon problème est que si une machine reçoit finish, elle s'arrete, et si l'autre machine à eu après ça une pièce qu'elle ne peut pas traiter, elle l'envoit à l'autre machine (dont le thread est déjà terminé...). Du coup mon programme ne s'arrete pas.
 
Là je pense que j'ai plus un problème de mise en place qu'autre chose, j'pense avoir bien saisi le fonctionnement des threads mais je suis bloqué là. Je pense pas que utiliser les sémaphores dans ce cas là puisse résoudre le problème.
 
Si quelqu'un à une idée...
 
Merci

Reply

Marsh Posté le 23-12-2008 à 03:16:12   

Reply

Marsh Posté le 23-12-2008 à 09:27:51    

google mutex,semaphore et variable condition

Reply

Marsh Posté le 23-12-2008 à 18:09:40    

Oui mais dans ce cas précis j'vois mal comment utiliser un mutex ou un sémaphore en fait, c'est ça le truc, ça peut pas trop s'appliquer. Après variable condition je sais pas c'est quoi donc je vais regarder.
Merci pour la réponse, si quelqu'un à d'autres suggestions...


Message édité par dukable le 23-12-2008 à 18:09:53
Reply

Marsh Posté le 23-12-2008 à 18:13:06    

Ah oui je viens de lire brièvement ce que c'est et ça pourrais le faire, puisque pour les 2 machines je pourrais les faire arrêter lorsque toutes les pièces ont été traitées. J'avais essayé de faire une variable globale compteur qui compte les pièces traitées en étant incrémentée par les 2 machines à chaque pièces traitées, jusqu'à avoir traitée le nombre de pièces passées en paramètres, mais je n'arrivais pas à faire terminer les threads.

Reply

Sujets relatifs:

Leave a Replay

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