Question sur la synchronisation des threads.
Bonsoir,
Voici mon probleme, pour un travail, j'ai du coder une routine qui calcul les nombres de fibonnaci. Pour ce faire, j'ai un tableau partagé entre mes threads qui contient soit la résultat pour fibo(n) ou vide. Je me demandais si était justifiable d'utiliser un mutex pour vérouiller mon tableau lorsqu'un thread accède a celui-ci. Puisque plusieurs threads peuvent calculer la meme valeur, meme si deux threads modifie la valeur en meme temps, le resultat restera le meme. Pour fibo(n), on lance un pthread qui calcul fibo(n-1) et un autre pour fibo(n-2). En terme de performance, est-il avantageux de ne pas mettre de mutex?
Re: Question sur la synchronisation des threads.
Citation:
Envoyé par sebastieng
<...> Pour ce faire, j'ai un tableau partagé entre mes threads qui contient soit la résultat pour fibo(n) ou vide. Je me demandais si était justifiable d'utiliser un mutex pour vérouiller mon tableau lorsqu'un thread accède a celui-ci <...>
Cest plus un problème de conception que de langage C qui ne sait pas ce qu'est un thread...
http://emmanuel-delahaye.developpez.com/pthreads.htm
Re: Question sur la synchronisation des threads.
Bonjour,
Citation:
Envoyé par Emmanuel Delahaye
Cest plus un problème de conception que de langage C
Problème résolu ;)
Citation:
Envoyé par sebastieng
Je me demandais si était justifiable d'utiliser un mutex pour vérouiller mon tableau lorsqu'un thread accède a celui-ci. Puisque plusieurs threads peuvent calculer la meme valeur, meme si deux threads modifie la valeur en meme temps, le resultat restera le meme.
Si deux (ou plusieurs) threads sont amené à partager une ressource en écriture, il est fortement conseillé d'utiliser un système de verrou.
Par contre je n'ai pas bien compri l'avantage d'utiliser les threads pour le calcul d'une suite :?
Re: Question sur la synchronisation des threads.
Citation:
Envoyé par gege2061
Par contre je n'ai pas bien compri l'avantage d'utiliser les threads pour le calcul d'une suite :?
En effet c'est bizarre :?
On peut faire beaucoup plus simple :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Fonction Fibo(N : Entier) renvoie un Entier;
Soit Fibos un Tableau d'Entiers à N+1 éléments;
Soit I un Entier;
Fibos[0] <- 1;
Fibos[1] <- 1;
Pour I de 2 à N :
Fibos[I] <- Fibos[I-1] + Fibos[I-2];
Fin Pour;
Résultat <- Fibos[N];
Fin Fonction; |
On peut aussi optimiser en espace utilisé plutôt qu'en temps d'exécution :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Fonction Fibo(N : Entier) renvoie un Entier;
Soit Fibos un Tableau d'Entiers à 2 éléments;
Soit I un Entier;
Fibos[0] <- 1;
Fibos[0] <- 1;
Pour I de 2 à N :
Fibos[I % 2] <- Fibos[(I-1) % 2] + Fibos[I % 2];
Fin Pour;
Résultat <- Fibos[N % 2];
Fin Fonction; |