Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS C FAQs C TUTORIELS C LIVRES C COMPILATEURS C SOURCES GTK+

Tutorial d'initiation
A la programmation avec l'API Windows

Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
PrécédentIndexSuivant

Chapitre 5

Le multithreading

4. Synchronisation

Cours théorique :

Les fonctions de synchronisation sont indispensables dans un programme multithread. La mauvaise synchronisation d'une application peut conduire à des plantages ou à des performances totalement désastreuses.

Etudions l'exemple d'un processus contenant deux threads, chacun utilisant le même tableau global. Un tel programme peut donner des résultats surprenant dans le cas d'une mauvaise synchronisation. Par exemple, deux évaluations consécutives de la même variable pourront retourner des valeurs différentes. Ce genre de comportement n'est généralement pas souhaité. Les deux threads devront alors se synchroniser avant d'accéder aux ressources partagées. Dans ce cas, la synchronisation consistera en une exclusion mutuelle (d'autres types de synchronisation seront étudiées plus tard). L'exclusion mutuelle consiste à faire patienter tous les threads demandant l'accès aux données partagées tant que le thread les utilisant n'a pas déclaré qu'il avait terminé. Chaque thread utilise une fonction pour signaler qu'il entre dans une section protégée. Il utilisera ensuite une seconde fonction pour signaler qu'il sort de la section protégée. Si un autre thread demande à entrer dans un bloc protégé, il sera mis en attente. Le thread qui est entré dans la section protégée doit impérativement signaler sa sortie de la section protégée sinon les autres threads resteront en attente. L'accès aux données partagées doit donc être aussi bref que possible.

Les fonctions de synchronisation sont un très bon moyen de mettre des threads en attente tout en conservant une charge processeur nulle. Si un thread entre dans une phase d'attente, son utilisation processeur restera très faible durant toute la période d'attente. Le système lui accordera de nouveau le contrôle dès que cela sera possible.

La synchronisation des threads devra donc toujours être effectuée par des fonctions de l'API et jamais par des boucles. L'utilisation de boucles ne repassant pas le contrôle au système rendrait les performances désastreuses et ralentirait l'exécution du processus lui même car l'accès du processeur serait accordé à des threads en attente, ce qui ne présente aucun intérêt.


PrécédentIndexSuivant

Responsable bénévole de la rubrique C : Arnaud Feltz (buchs) - Contacter par EMail :
Vos questions techniques : forum d'entraide C - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.