Tutorial d'initiation A la programmation avec l'API Windows
Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
Chapitre 5Le multithreading9. Sections Critiques
Cours théorique :
Les sections critiques sont utilisées dans le cadre de la synchronisation, de manière à réaliser des exclusions mutuelles. Elles permettent de créer une section de code qui sera protégé, c'est à dire qu'un seul thread à la fois aura accès à ce code. Les sections critiques sont très utiles pour protéger des données partagées.
L'utilisation des sections critiques est relativement simple. Pour créer une section critique, l'application doit déclarer une variable de type CRITICAL_SECTION, généralement globale. Puis au moins un thread doit initialiser la section critique en appelant la fonction InitializeCriticalSection(). Cette fonction peut être appelée un nombre indéfini de fois. Par exemple, chaque thread qui va utiliser la section critique peut s'assurer qu'elle est valide en appelant cette fonction.
Deux fonctions seront ensuite utilisées pour signifier l'entrée et la sortie d'un bloc protégé. La fonction EnterCriticalSection() permet de signaler l'entrée dans un bloc protégé. Si un thread a déjà appelé cette fonction et n'est pas encore sorti du bloc protégé, cette fonction mettra en attente n'importe quel autre thread. Le même thread peut appeler cette fonction plusieurs fois sans être bloqué, mais il devra alors appeler la fonction de sortie de bloc un nombre de fois égal pour indiquer sa sortie du bloc protégé.
Un thread indique qu'il sort d'un bloc protégé en appelant la fonction LeaveCriticalSection(). Un des threads en attente sera alors débloqué et pourra à son tour exécuter le bloc protégé.
|