Upload
fulbert-daniel
View
109
Download
1
Embed Size (px)
Citation preview
Responsables : Joël Falcou et Jean-Thierry LaprestéPrésenté par : Maxence Schmitt et Romain Guidoux 22 Mars
2011
IntroductionCréer une bibliothèque C++
Simplification de la gestion des threads
Utilisation de bibliothèques Boost
Etude des différentes solutions possibles
2
PlanIntroduction
1.Présentation du patron de conception « Objets Actifs »
2.Les implémentations proposées
3.Détail de l’implémentation réalisée
Conclusion
3
Les threadsUn processeur n’exécute qu’un seul thread à un instant tImpression d’exécution parallèle pour l’utilisateur
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation SérialisationFile de messages
4Résultats
Les threads en C++Solutions disponibles :
Qt : Qthread
Bibliothèque POSIX : pthread
Boost : Boost.Threads
5
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
Les sections critiquesGestion des ressources critiques
Exclusion mutuelle (mutex)
6
using namespace std;int nb = 4;
void threadWork(){ if (nb % 2 == 0) cout << "Pair : " << nb << endl; else cout << "Impair : " << nb << endl;
// Un traitement compliqué ici nb++;}
int main(void){ try { boost::thread unThread(&threadWork); unThread.join(); } catch (exception &e) {} return 0;}
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
Les objets actifsArticle d’Herbert Sutter : ”Prefer Using Active Objets
Instead of Naked Threads”
Rendre asynchrones des méthodes d’un objet
Cacher la manipulation des threads
7
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
Solution 1 : fonctions lambda Fonction sans nom définie pour un usage ponctuel
8
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
Solution 1 : fonctions lambda Syntaxe utilisée par Sutter -> prochaine norme de C++
Recherches dans Boost.Lambda et Boost.Phoenix Utilisation uniquement dans les boucles
9
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
Solution 2 : héritageA chaque méthode asynchrone correspond un sous-type de Message
10
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
Choix de l’implémentationUtilisation des fonctions lambda impossible
Solution à base d’héritageClasse Message interne à l’Active Helper
Boost.Thread pour l’implémentation des threads
11
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
File de messagesBoost.Interprocess
AvantagesFIFO
Synchronisée
Attente passive
12
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
File de messagesFile de messages système
Doivent être uniques
N’est pas génériqueTrouver une solution pour sérialiser les données
Solution alternativeFile normale concurrente
13
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
Sérialisation
Boost.Serialization
Par redéfinition de méthodeserialize() ou save()/load()
Permet de gérer les arguments des Messages
14
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
Sérialisation d’argumentsSérialisation d’un paramètre
Sérialisation d’un pointeur d’objet actif
15
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
Destruction d’un objet actifDestruction de l’objet actif
Destruction de l’activeHelper
Exécution des messages
Attente d’un message de fin
Fermeture thread
16
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
TestsTests réalisés
Méthode sans paramètre
Méthode avec paramètres
Pointeur vers l’objet actif
Plusieurs objets actifs
17
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
RésultatsLes messages d’un même objet actif patientent
jusqu’à leur exécution
Les paramètres sont bien pris en charges
Plusieurs objets actifs peuvent s’exécuter parallèlement
18
Patron Objets Actifs
Implémentations proposées
Implémentation réalisée
Threads Objets Actifs Lambda Héritage Présentation Sérialisation RésultatsFile de messages
ConclusionObjectifs atteints
Implémentation d’une version fonctionnelle du patron
Programme de testDocumentation d’utilisation
Ce qu’il reste à faire :Tests unitaires (Boost)Permettre le renvoi de résultats
19