La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011.

Présentations similaires


Présentation au sujet: "Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011."— Transcription de la présentation:

1 Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011

2 Introduction Créer une bibliothèque C++ Simplification de la gestion des threads Utilisation de bibliothèques Boost Etude des différentes solutions possibles 2

3 Plan Introduction 1. Présentation du patron de conception « Objets Actifs » 2. Les implémentations proposées 3. Détail de limplémentation réalisée Conclusion 3

4 Les threads Un processeur nexécute quun seul thread à un instant t Impression dexécution parallèle pour lutilisateur Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation SérialisationFile de messages 4 Résultats

5 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 LambdaHéritagePrésentation Sérialisation Résultats File de messages

6 Les sections critiques Gestion 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 LambdaHéritagePrésentation Sérialisation Résultats File de messages

7 Les objets actifs Article dHerbert Sutter : Prefer Using Active Objets Instead of Naked Threads Rendre asynchrones des méthodes dun objet Cacher la manipulation des threads 7 Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation Sérialisation Résultats File de messages

8 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 LambdaHéritagePrésentation Sérialisation Résultats File de messages

9 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 for_each(v.begin(), v.end(), if_(arg1 > 5) [ cout << arg1 << ", " ] ); Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation Sérialisation Résultats File de messages

10 Solution 2 : héritage A 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 LambdaHéritagePrésentation Sérialisation Résultats File de messages

11 Choix de limplémentation Utilisation des fonctions lambda impossible Solution à base dhéritage Classe Message interne à lActive Helper Boost.Thread pour limplémentation des threads 11 Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation Sérialisation Résultats File de messages

12 Boost.Interprocess Avantages FIFO Synchronisée Attente passive 12 Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation Sérialisation Résultats File de messages

13 File de messages système Doivent être uniques Nest pas générique Trouver une solution pour sérialiser les données Solution alternative File normale concurrente 13 Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation Sérialisation Résultats File de messages

14 Sérialisation Boost.Serialization Par redéfinition de méthode serialize() 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 LambdaHéritagePrésentation Sérialisation Résultats File de messages

15 Sérialisation darguments Sérialisation dun paramètre Sérialisation dun pointeur dobjet actif 15 void serialize(Archive& ar, const unsigned int version) { boost::serialization::base_object (*this); ar & filename; } Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation Sérialisation Résultats File de messages

16 Destruction dun objet actif Destruction de lobjet actif Destruction de lactiveHelper Exécution des messages Attente dun message de fin Fermeture thread 16 Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation Sérialisation Résultats File de messages

17 Tests Tests réalisés Méthode sans paramètre Méthode avec paramètres Pointeur vers lobjet actif Plusieurs objets actifs 17 Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation Sérialisation Résultats File de messages

18 Résultats Les messages dun même objet actif patientent jusquà leur exécution Les paramètres sont bien pris en charges Plusieurs objets actifs peuvent sexécuter parallèlement 18 Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs LambdaHéritagePrésentation Sérialisation Résultats File de messages

19 Conclusion Objectifs atteints Implémentation dune version fonctionnelle du patron Programme de test Documentation dutilisation Ce quil reste à faire : Tests unitaires (Boost) Permettre le renvoi de résultats 19


Télécharger ppt "Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011."

Présentations similaires


Annonces Google