Bonjour à tous,
Dans le cadre de ma formation, je veux créer un programme multithreads me permettant d'optimiser le produit entre plusieurs matrices d'assez grande taille (à première vue, je dirai +- 100.000 matrices de taille max. 1000x1000). Ces matrices se trouvent dans un fichier et j'ai déjà implémenté la "lecture" de ce fichier.
Techniquement, je compte faire usage des sémaphores, mutex, threads POSIX et du principe des producteurs & consommateurs.
Voilà ce que j'ai déjà implémenté : le thread principal est producteur. Sa tâche est de lire le fichier tout au long du déroulement de programme et de stocker chaque matrice lue dans une queue FIFO - sans dépasser un certaine quantité bien sûr (j'ai imposé une limite de 40 slots, un peu au hasard).
Les autres threads (initialement 2, mais l'utilisateur peut changer ce nombre s'il le souhaite) sont consommateurs. Dès que 2 matrices consécutives sont disponibles au début de la file, un thread s'occupe de les prendre et de les multiplier.
Voilà où je suis bloqué : je n'ai aucune idée de comment arranger les threads pour qu'ils remettent dans l'ordre les matrices soit dans la queue, soit dans une nouvelle, etc. Par exemple, si le thread 1 prend les matrices A & B et que le thread 2 prend les matrices C & D, il faut que le thread 1 remette dans une nouvelle queue A*B avant que le thread 2 ne mette C*D (ou toute autre solution acceptable).
Cela fait depuis hier midi que je sèche sur ce problème : quelqu'un aurait-il une idée ?
Merci beaucoup d'avance pour vos réponses![]()
Partager