DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

PV

Aide / WLangage / Fonctions WLangage / Fonctions standard / Fonctions de gestion des traitements / Threads, sémaphores, signaux et mutex
  • Présentation
  • Principe
  • Comment mettre en place un mutex ?
  • Les étapes :
  • Remarques
  • Les fonctions de gestion des mutex
WINDEV
WindowsLinuxJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac Catalyst
Autres
Procédures stockées
Présentation
Les mutex permettent de limiter l'exécution simultanée d'un code (procédure, ligne de code, ...) à un thread à un instant donné. Un mutex peut être partagé par plusieurs applications.
Remarque : D'autres systèmes permettent également de protéger une partie de code :
  • les sémaphores permettent de limiter l'exécution simultanée d'un code (procédure, ligne de code, ...) à un ou plusieurs threads à un instant donné. Un sémaphore peut être partagé par plusieurs applications.
  • les sections critiques permettent de limiter l'exécution simultanée d'un code (procédure, ligne de code, ...) à un thread à un instant donné dans une seule application.
Principe
Le mutex a été créé avec la fonction MutexCrée.
  1. Le thread n°1 exécute la fonction MutexDébut : aucun thread n'est actuellement présent dans le mutex.
  2. Le thread n°1 exécute la partie de code protégée par le mutex.
  3. Pendant que le thread n°1 exécute le code protégé par le mutex, un thread n°2 exécute la fonction MutexDébut : le code protégé par le mutex étant déjà en cours d'exécution par le thread n°1, le thread n°2 attend le déblocage du mutex.
  4. Le thread n°1 exécute la fonction MutexFin : plus aucun thread n'exécute le code du mutex.
  5. Le thread n°2 peut exécuter le code protégé par le mutex.
  6. Le thread n°2 exécute la fonction MutexFin : plus aucun thread n'exécute le code du mutex.
Comment mettre en place un mutex ?

Les étapes :

Les différentes étapes de la mise en place d'un mutex sont les suivantes :
  1. Création d'un mutex avec la fonction MutexCrée. Le mutex est associé à un nom.
  2. Appel de la fonction MutexDébut avant la portion de code à protéger.
  3. Appel de la fonction MutexFin pour délimiter la portion de code à protéger. Les lignes de code situées après la fonction MutexFin ne seront plus protégées.
  4. Destruction du mutex avec la fonction MutexDétruit.

Remarques

  • Les parties de code protégées par un mutex doivent être les plus courtes possibles et concerner uniquement des traitements "critiques".
  • Lorsqu'un thread est en attente, les ressources du processeur ne sont pas utilisées.
  • Les mutex s'appliquent aussi bien au thread principal qu'aux threads secondaires (créés avec la fonction ThreadExécute). Il est nécessaire d'éviter le blocage du thread principal. En effet, si le thread principal est bloqué (en attente), l'application ne peut plus s'exécuter.
  • Les fonctions MutexDébut et MutexFin doivent être utilisées dans le même traitement (par exemple dans une procédure).
  • Les mutex peuvent être partagés ou non entre les différentes applications exécutées sur le poste. Il suffit d'indiquer le mode de partage des mutex lors de leur création (fonction MutexCrée).

Les fonctions de gestion des mutex

Les fonctions du WLangage spécifiques à la gestion des mutex sont les suivantes :
MutexCréeCrée explicitement un mutex.
MutexDébutBloque le thread courant en attendant que le mutex soit libre.
MutexDétruitDétruit explicitement un mutex.
MutexFinSignale que le thread libère le mutex.
Version minimum requise
  • Version 16
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 23/09/2024

Signaler une erreur ou faire une suggestion | Aide en ligne locale