responsables : joël falcou et jean-thierry lapresté présenté par : maxence schmitt et romain...
TRANSCRIPT
![Page 1: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/1.jpg)
Responsables : Joël Falcou et Jean-Thierry LaprestéPrésenté par : Maxence Schmitt et Romain Guidoux 22 Mars
2011
![Page 2: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/2.jpg)
IntroductionCréer une bibliothèque C++
Simplification de la gestion des threads
Utilisation de bibliothèques Boost
Etude des différentes solutions possibles
2
![Page 3: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/3.jpg)
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
![Page 4: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/4.jpg)
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
![Page 5: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/5.jpg)
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
![Page 6: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/6.jpg)
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
![Page 7: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/7.jpg)
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
![Page 8: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/8.jpg)
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
![Page 9: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/9.jpg)
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
![Page 10: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/10.jpg)
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
![Page 11: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/11.jpg)
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
![Page 12: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/12.jpg)
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
![Page 13: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/13.jpg)
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
![Page 14: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/14.jpg)
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
![Page 15: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/15.jpg)
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
![Page 16: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/16.jpg)
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
![Page 17: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/17.jpg)
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
![Page 18: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/18.jpg)
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
![Page 19: Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011](https://reader037.vdocuments.pub/reader037/viewer/2022102900/551d9d82497959293b8bca7d/html5/thumbnails/19.jpg)
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