Jc/md/lp-01/05Trains_corrigé1 Threads et Synchronisation Application train Corrigé

Slides:



Advertisements
Présentations similaires
Le moteur
Advertisements

Génération de plate-forme
Rappels C.
Le langage C++ Les boucles.
Journées académiques Microsoft 2005
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
Les numéros
1 1 Momentum. 2 2 Tout objet en mouvement continuera son mouvement tant que rien nentrave sa progression.
Répondez à ces quelques questions
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Jc/md/lp-01/05Communication inter processus1 Communication inter process Présentation.
Driver de port parallèle
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/05IT CE4.2 : cours1 Traitement des interruptions Cours.
Jc/md/lp-01/06Applications1 Émulateur. jc/md/lp-01/06Applications2 Objectif du chapitre Génération dapplications –WCE Console Application –WCE Application.
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.
Jc/md/lp-01/06Kernel Tracker1 Debugging Kernel Tracker.
Jc/md/lp-01/05TTY_IT : corrigé1 TTY_IT Corrigé. jc/md/lp-01/05TTY_IT : corrigé2 Objectif du chapitre Proposer une solution pour les exercices suggérés.
Jc/md/lp-01/05Essai ligne série COM1 : corrigé1 Essai ligne série CEPC Application écho sur COM1 Présentation.
Driver UART en polling : corrigé
Jc/md/lp-01/05Driver élémentaire : corrigé1 Driver élémentaire Émulateur Corrigé
Jc/md/lp-01/05Trains_presentation1 Threads et Synchronisation Application train Présentation.
Jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation.
Primitives - Intégration
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Faculté I&C, Claude Petitpierre, André Maurer 1 Systèmes multi-processus C. Petitpierre
CYCLE 3 : Alternatives Faire des choix dans un programme en C 1- AIGUILLAGE SIMPLE sur CONDITION : if-else 2-AIGUILLAGE MULTIPLE sur CONDITIONS if-else.
Récursivité.
15. 1 MILLION $ $ $ $ $ $ $ $ $ $ 04.
La haute tour sombre 3 Des actions
Processus et threads.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
Approche mémoire partagée Threads – Paradigme de lapproche – Objets exécutés par les processeurs threads vs processus, – un thread possède : Ses registres,
TRAITEMENT DE STRUCTURES
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Programmation concurrente
Notre calendrier français MARS 2014
Multi-Thread Jian-Yun Nie
Communication interprocessus
Les pointeurs en C. valeur : main () { float valeur; void* pointeur; }
Introduction au Langage C
C'est pour bientôt.....
Répéter dans un programme avec une Instruction itérative
FONCTIONS avec paramètres en Entrée/Sortie
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Structures des données
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
1 Modèle pédagogique d’un système d’apprentissage (SA)
10 paires -. 9 séries de 3 étuis ( n° 1 à 27 ) 9 positions à jouer 5 tables Réalisé par M..Chardon.
Ch. PAUL - Piles et Files à l'aide de listes chainées
CALENDRIER-PLAYBOY 2020.
USAM BRIDGE H O W E L L -CLASSIQUE
LES PILES ET FILES.
9 paires séries de 3 étuis ( n° 1 à 27 )
Quel est l’intérêt d’utiliser le diagramme de Gantt dans la démarche de projet A partir d’un exemple concret, nous allons pouvoir exploiter plusieurs parties.
Dr. KHERRI Abdenacer 2014/ ECOLE DES HAUTES ETUDES COMMERCIALES.
Sous-programmes.
et quelques rappels sur certains éléments du langage C
Gestion de processus Corrigé TD 1 EFREI I
Argc et argv Utilisation des paramètres de la ligne de commande.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Pthread Ordonnancement. #define _MULTI_THREADED #include #ifndef _CHECK_H #define _CHECK_H /* headers used by a majority of the example program */ #include.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Transcription de la présentation:

jc/md/lp-01/05Trains_corrigé1 Threads et Synchronisation Application train Corrigé

jc/md/lp-01/05Trains_corrigé2 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_corrigé3 TRAIN main(2) // Définitions et réservations // Paramètres passés aux threads valeurs de 1 à 5 DWORD ThPa1 = 1; DWORD ThPa2 = 2; DWORD ThPa3 = 3; DWORD ThPa4 = 4; DWORD ThPa5 = 5; DWORD val; // HANDLE utilisés HANDLE AB_11, AB_12, AB_13, AB_14, AB_15, BA_21, BA_22, BA_23, BA_24, BA_25;

jc/md/lp-01/05Trains_corrigé4 TRAIN main(3) // Création d'un sémaphore à 3 jetons possibles // vide au départ SEM=CreateSemaphore(NULL,0,3,NULL); // Création des événements de sens SENS_AB=CreateEvent(NULL,TRUE,FALSE,NULL); SENS_BA=CreateEvent(NULL,TRUE,FALSE,NULL); printf("début du main\n\r\n");

jc/md/lp-01/05Trains_corrigé5 TRAIN main(4) // Création des 10 Threads AB_11=CreateThread( 0, 0, AB_MAIN, &ThPa1, 0, 0); AB_12=CreateThread( 0, 0, AB_MAIN, &ThPa2, 0, 0); AB_13=CreateThread( 0, 0, AB_MAIN, &ThPa3, 0, 0); AB_14=CreateThread( 0, 0, AB_MAIN, &ThPa4, 0, 0); AB_15=CreateThread( 0, 0, AB_MAIN, &ThPa5, 0, 0); BA_21=CreateThread( 0, 0, BA_MAIN, &ThPa1, 0, 0); BA_22=CreateThread( 0, 0, BA_MAIN, &ThPa2, 0, 0); BA_23=CreateThread( 0, 0, BA_MAIN, &ThPa3, 0, 0); BA_24=CreateThread( 0, 0, BA_MAIN, &ThPa4, 0, 0); BA_25=CreateThread( 0, 0, BA_MAIN, &ThPa5, 0, 0);

jc/md/lp-01/05Trains_corrigé6 TRAIN main(5) // Boucle principale do { // Attente avant depart de A vers B Sleep(1000); //Libération des 3 jetons ReleaseSemaphore(SEM,3,NULL); //Set de l'Event de sens de A vers B SetEvent(SENS_AB); //Attente de 500 tics Sleep (500); //Reset de l'Event de sens de A vers B ResetEvent(SENS_AB);

jc/md/lp-01/05Trains_corrigé7 TRAIN main(6) // Attente de l'arrivée des trains // et récupération des 3 jetons WaitForSingleObject(SEM,INFINITE); // Attente avant départ de B vers A Sleep(1000); //Libération des 3 jetons ReleaseSemaphore(SEM,3,NULL);

jc/md/lp-01/05Trains_corrigé8 TRAIN main(7) // Set de l'Event de sens de B vers A SetEvent(SENS_BA); // Attente de 500 tics Sleep (500); // Reset de l'Event de sens de B vers A ResetEvent(SENS_BA); // Attente de l'arrivée des trains // et récupération des 3 jetons WaitForSingleObject(SEM,INFINITE);

jc/md/lp-01/05Trains_corrigé9 TRAIN main(8) // Vérification de l'arrivée du dernier train GetExitCodeThread ( BA_25,&val); printf ("code du thread : %d \n\r", val); } //Continuer tant que dernier train pas arrivé while ( val == 259 ) ; printf ("fin du main"); getchar();

jc/md/lp-01/05Trains_corrigé10 TRAIN main(10) // Close des Handle CloseHandle(AB_11); CloseHandle(AB_12); CloseHandle(AB_13); CloseHandle(AB_14); CloseHandle(AB_15); CloseHandle(BA_21); CloseHandle(BA_22); CloseHandle(BA_23); CloseHandle(BA_24); CloseHandle(BA_25);

jc/md/lp-01/05Trains_corrigé11 TRAIN main(11) CloseHandle(SEM); CloseHandle(SENS_AB); CloseHandle(SENS_BA); return 0; }

jc/md/lp-01/05Trains_corrigé12 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 DWORD pp= *(DWORD*) p;

jc/md/lp-01/05Trains_corrigé13 TRAIN ThreadA_B (2) // Attente de l'obtention du sens et du sémaphore // les 2 valeurs doivent être égales a zéro while ( SENS!=0 || SEMA!=0) { SENS=WaitForSingleObject(SENS_AB,INFINITE); SEMA=WaitForSingleObject(SEM,1); }

jc/md/lp-01/05Trains_corrigé14 TRAIN ThreadA_B (3) // 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 ReleaseSemaphore(SEM,1,NULL); return 0; }

jc/md/lp-01/05Trains_corrigé15 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 DWORD pp= *(DWORD*) p;

jc/md/lp-01/05Trains_corrigé16 TRAIN ThreadB_A (2) // Attente de l'obtention du sens et du sémaphore // les 2 valeurs doivent être égales a zéro while ( SENS!=0 || SEMA!=0) { SENS=WaitForSingleObject(SENS_BA,INFINITE); SEMA=WaitForSingleObject(SEM,1); }

jc/md/lp-01/05Trains_corrigé17 TRAIN ThreadB_A (3) // 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 ReleaseSemaphore(SEM,1,NULL); return 0; }

jc/md/lp-01/05Trains_corrigé18 Résultat