Jc/md/lp-01/05Trains_presentation1 Threads et Synchronisation Application train Présentation.

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Génération de plate-forme
Chapitre annexe. Récursivité
Rappels C.
Journées académiques Microsoft 2005
Synchronisation des processus père - fils
Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie III École Normale Supérieure Tétouan Département Informatique
TP 7.1 synchronized et join Écrire un programme Java qui crée 1000 threads et maintient un compteur nb du nombre de threads créés jusque-là. Le thread.
Décembre 2011Diaporama de présentation2 TROIS GRANDS ENJEUX POUR LES AGGLOMÉRATIONS FRANÇAISES Lexpansion urbaine, létalement des villes et la périurbanisation.
Synchronisation des Processus
Conception et programmation Programmation Parallèle
Chapitre 3 Coopération et synchronisation par variables partagées
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Paramètres et pointeurs
Revision.
Jc/md/lp-01/05Communication inter processus1 Communication inter process Présentation.
Jc/md/lp-01/06Threads1. jc/md/lp-01/06Threads2 Objectif du chapitre Génération dune application avec thread –Création dun thread –Identification dun thread.
Jc/md/lp-01/05Essai ligne série COM1 : présentation1 Essai ligne série CEPC Application écho sur COM1 Présentation.
Gestion mémoire : présentation
Jc/md/lp-01/05gestion mémoire : corrigé1 Gestion mémoire Corrigé
Jc/md/lp-01/05Communication inter processus corrigé1 Communication inter process Corrigé
Jc/md/lp-01/06Synchronisation1. jc/md/lp-01/06Synchronisation2 Objectif du chapitre Création dune application ayant plusieurs threads Synchronisations.
Driver de port parallèle
Jc/md/lp-01/06Kernel Tracker1 Debugging Kernel Tracker.
Jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation.
Jc/md/lp-01/05Trains_corrigé1 Threads et Synchronisation Application train Corrigé
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Récursivité.
Les instructions PHP pour l'accès à une base de données MySql
TRAITEMENT DE STRUCTURES
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Test et débogage Tests unitaires. Gestion d’erreurs. Notion d’état, de pré-condition et de post-condition. Assertion. Traces de programme. Débogueur et.
Module 51 Module 5 - Synchronisation de Processus (ou threads, ou fils ou tâches) Module 5 - Synchronisation de Processus (ou threads, ou fils ou tâches)
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Instruction sélective switch-case Instruction répétitive do-while For
Chapitre XI Gestion des erreurs et exceptions. 2 La gestion des erreurs et exceptions De nombreux problèmes peuvent survenir pendant lexécution dun programme:
Lau GatignonK12 Beam Project Presentation1 Proposition pour nouvelle expérience NA48/3 But: Recherche dun mode de desintégation rare de K + + Lexpérience.
15 septembre 2009B3 - Cours déquipements - Présentation1 Equipement - Baccalauréat 3 1.Technologies des installations techniques. 2. Visite dinstallations.
Plan troisième cours Instruction sélective Instruction répétitive
Répéter dans un programme avec une Instruction itérative
FONCTIONS avec paramètres en Entrée/Sortie
Plan cours La notion de pointeur et d’adresse mémoire.
La librairie assert.h.
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Sous-programmes.
et quelques rappels sur certains éléments du langage C
Gestion de processus Corrigé TD 1 EFREI I
Travailler avec des processus
NOTIONS DE BASE DES SYSTÈMES TEMPS-RÉEL Sujets Concepts de processus/thread concurrents –Windows NT et la programmation temps réel Lectures: Chapitres.
Argc et argv Utilisation des paramètres de la ligne de commande.
Interactions entre Processus
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Tutorat en bio-informatique
Programmation Système et Réseau
Introduction au langage C Fonctions et Procédures
Méthodes et outils de conception Introduction à la programmation Paramètre de retour Appel d’une fonction Portée des variables Définition Pourquoi les.
Les types composés Les enregistrements.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
02/10/2015Les structures de contrôle1 COURS A2I12 Initiation à l'algorithmique illustrée par le langage C Guillaume BOURLET Département GEII IUT Sénart/Fontainebleau.
L. Gurret – M. Herve – P. Mignon – J. Prarioz. Introduction  Dernière étape d’analyse  Cahier des charges, spécifications et conception orientée objet.
1 UNIX AVANCE Yves PAGNOTTE – Janvier – LES PROCESSUS SOUS UNIX.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

jc/md/lp-01/05Trains_presentation1 Threads et Synchronisation Application train Présentation

jc/md/lp-01/05Trains_presentation2 Objectif du chapitre Application des chapitres threads et synchronisation à un exemple concret

jc/md/lp-01/05Trains_presentation3 TRAINS (1) On suppose une voie ferrée unique Des trains doivent passer dans les 2 sens de A vers B et de B vers A On suppose 5 trains en attente de chaque cote 3 trains peuvent se suivre pour emprunter cette voie unique Ecrire le programme qui va gérer le passage de ces 10 trains en toute sécurité

jc/md/lp-01/05Trains_presentation4 TRAINS (2) Comme plusieurs trains peuvent se suivre dans le même sens, il ny a pas exclusion mutuelle entre tous les trains Dans ce cas on utilise la technique des Sémaphores On va créer un sémaphore à 3 jetons De plus pour la sécurité du sens on va créer un événement SENS_AB, et un événement SENS_BA

jc/md/lp-01/05Trains_presentation5 TRAIN (3) Pour quun train puisse entrer sur la voie il lui faudra obtenir lévénement de sens et de plus un des jetons du sémaphore Chaque train sera un thread Il y aura 5 Threads AB_MAIN ( A vers B) Il y aura 5 Threads BA_MAIN ( B vers A) Lors des CreateThread on passera un numéro (1 à 5) pour différencier les 5 Threads de chaque sens, ce qui permet de ne pas écrire le code de 10 threads, mais seulement de 2

jc/md/lp-01/05Trains_presentation6 TRAIN (4) Programme principal –Créer les 10 trains (Threads) –Créer les Event de sens –Créer le sémaphore à 3 jetons possibles –Gérer le passage des trains (2 passages dans chaque sens, ou boucle tant que le dernier train nest pas arrivé: dernier thread non actif) –Fermer tout ce qui a été ouvert (Handle)

jc/md/lp-01/05Trains_presentation7 TRAIN (5) Boucle de gestion des trains –Libérer les jetons –Positionner A vers B pendant 500 ms –Attendre larrivée des trains en récupérant les jetons –Faire la même chose pour lautre sens –Sarrêter quand tous les trains sont passés

jc/md/lp-01/05Trains_presentation8 TRAIN (6) Thread train –Récupérer le numéro du train –Attendre le sémaphore et lévénement de sens –Envoyer message « train numéro x parti » –Attendre 1 seconde (durée du trajet) –Envoyer message « train numéro x arrivé » –Rendre le jeton

jc/md/lp-01/05Trains_presentation9 TRAIN main(1) #include "stdafx.h" #include "Winbase.h" DWORD WINAPI AB_MAIN (LPVOID p); DWORD WINAPI BA_MAIN (LPVOID p); HANDLE SEM; HANDLE SENS_AB,SENS_BA; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {

jc/md/lp-01/05Trains_presentation10 TRAIN main(2) // Définitions et réservations // Paramètres passés aux threads valeurs de 1 à 5 // TODO // HANDLE utilisés // TODO printf("début du main\n\r\n"); // Création d'un sémaphore à 3 jetons possibles // vide au départ // TODO

jc/md/lp-01/05Trains_presentation11 TRAIN main(3) // Création des événements de sens // TODO // Création des 10 Threads // TODO

jc/md/lp-01/05Trains_presentation12 TRAIN main(4) // Boucle principale do { // Attente avant départ de A vers B (1 seconde) // TODO // Libération des 3 jetons // TODO // Set de l'Event de sens de A vers B // TODO // Attente de 500 tics ( demi seconde) // TODO // Reset de l'Event de sens de A vers B // TODO

jc/md/lp-01/05Trains_presentation13 TRAIN main(4) // Attente de l'arrivée des trains // Récupération des 3 jetons // TODO // Attente avant départ de B vers A (1 seconde) // TODO // Libération des 3 jetons // TODO // Set de l'Event de sens de B vers A // TODO // Attente de 500 tics // TODO // Reset de l'Event de sens de B vers A // TODO

jc/md/lp-01/05Trains_presentation14 TRAIN main(5) // Attente de l'arrivée des trains // Récupération des 3 jetons // TODO // Vérification de l'arrivée du dernier train // TODO } while // Fin de boucle // TODO

jc/md/lp-01/05Trains_presentation15 TRAIN main(6) printf ("fin du main"); getchar(); // Close des Handle // TODO return 0; }

jc/md/lp-01/05Trains_presentation16 TRAIN ThreadA_B (1) DWORD WINAPI AB_MAIN (LPVOID p) { // Initialisation des variables de retour // de la fonction WaitForSingleObject DWORD SENS=1,SEMA=1; // Récupération du numéro du thread (DWORD pp) // p est un pointeur de void // il pointe sur le paramètre passé au thread // TODO

jc/md/lp-01/05Trains_presentation17 TRAIN ThreadA_B (2) // Attente de l'obtention du sens et du sémaphore // les 2 valeurs doivent être égales a zéro // TODO // Traitement printf ("départ du train AB %d \n\r",pp); Sleep (1000); printf ("arrivée du train AB %d \n\r",pp); // Libération du sémaphore // TODO return 0; }

jc/md/lp-01/05Trains_presentation18 TRAIN ThreadB_A (1) DWORD WINAPI BA_MAIN (LPVOID p) { // Initialisation des variables de retour // de la fonction WaitForSingleObject DWORD SENS=1,SEMA=1; // Récupération du numéro du thread (DWORD pp) // p est un pointeur de void // il pointe sur le paramètre passé au thread // TODO

jc/md/lp-01/05Trains_presentation19 TRAIN ThreadB_A (2) // Attente de l'obtention du sens et du sémaphore // les 2 valeurs doivent être égales a zéro // TODO // Traitement printf ("départ du train BA %d \n\r",pp); Sleep (1000); printf ("arrivée du train BA %d \n\r",pp); // Libération du sémaphore // TODO return 0; }

jc/md/lp-01/05Trains_presentation20 Résultat

jc/md/lp-01/05Trains_presentation21 Conclusion Une bonne utilisation des sémaphores et des événements permet dobtenir lenchaînement désiré