PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • Présentation
  • Principe
  • Comment mettre en place un sémaphore ?
  • Les étapes :
  • Remarques
  • Les fonctions de gestion des sémaphores
  • Exemple
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget iOSApple WatchCatalystUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Présentation
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.
Par exemple : Deux threads spécifiques sont utilisés dans une application bancaire :
  • un thread pour créditer les comptes
  • un thread pour débiter les comptes.
A un instant donné, il ne peut y avoir qu'un crédit de compte ou un débit de compte.
Remarque : D'autres systèmes permettent également de protéger une partie de code :
  • Versions 16 et supérieures
    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. Pour plus de détails, consultez Gérer les mutex dans les threads.
    Nouveauté 16
    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. Pour plus de détails, consultez Gérer les mutex dans les threads.
    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. Pour plus de détails, consultez Gérer les mutex dans les threads.
  • 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. Pour plus de détails, consultez Gérer les sections critiques.
Versions 18 et supérieures
Universal Windows 10 App Cette fonctionnalité est désormais disponible en mode Windows Store apps.
Widget Android Cette fonctionnalité est désormais disponible en mode Widget Android.
Nouveauté 18
Universal Windows 10 App Cette fonctionnalité est désormais disponible en mode Windows Store apps.
Widget Android Cette fonctionnalité est désormais disponible en mode Widget Android.
Universal Windows 10 App Cette fonctionnalité est désormais disponible en mode Windows Store apps.
Widget Android Cette fonctionnalité est désormais disponible en mode Widget Android.
Versions 19 et supérieures
iPhone/iPad Cette fonctionnalité est désormais disponible pour les applications iPhone/iPad.
Nouveauté 19
iPhone/iPad Cette fonctionnalité est désormais disponible pour les applications iPhone/iPad.
iPhone/iPad Cette fonctionnalité est désormais disponible pour les applications iPhone/iPad.
Principe
Le sémaphore a été créé avec la fonction SémaphoreCrée.
  1. Le thread n°1 exécute la fonction SémaphoreDébut : aucun thread n'est actuellement présent dans le sémaphore.
  2. Le thread n°1 exécute la partie de code protégée par le sémaphore.
  3. Pendant que le thread n°1 exécute le code protégé par le sémaphore, un thread n°2 exécute la fonction SémaphoreDébut : le code protégé par le sémaphore étant déjà en cours d'exécution par le thread n°1, le thread n°2 attend le déblocage du sémaphore.
  4. Le thread n°1 exécute la fonction SémaphoreFin : plus aucun thread n'exécute le code du sémaphore.
  5. Le thread n°2 peut exécuter le code protégé par le sémaphore.
  6. Le thread n°2 exécute la fonction SémaphoreFin : plus aucun thread n'exécute le code du sémaphore.
Comment mettre en place un sémaphore ?

Les étapes :

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

Remarques

  • Les parties de code protégées par un sémaphore doivent être les plus courtes possibles, et concerner uniquement des traitements "critiques".
  • Un sémaphore de même nom peut être utilisé pour protéger plusieurs zones de code différentes. Un seul thread pourra être à un instant donné dans une des zones protégées par le sémaphore.
  • Lorsqu'un thread est en attente, les ressources du processeur ne sont pas utilisées.
  • Les sémaphores 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 SémaphoreDébut et SémaphoreFin doivent être utilisées dans le même traitement (par exemple dans une procédure).
  • Les sémaphores 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 sémaphores lors de leur création (fonction SémaphoreCrée).

Les fonctions de gestion des sémaphores

Les fonctions du WLangage spécifiques à la gestion des sémaphores sont les suivantes :
Versions 09 et supérieures
SémaphoreCrée
Nouveauté 09
SémaphoreCrée
SémaphoreCrée
Crée un sémaphore.
Versions 09 et supérieures
SémaphoreDébut
Nouveauté 09
SémaphoreDébut
SémaphoreDébut
Bloque le thread en cours en attendant que le sémaphore soit ouvert (c'est-à-dire qu'une place "libre" soit disponible dans la zone protégée).
Versions 09 et supérieures
SémaphoreDétruit
Nouveauté 09
SémaphoreDétruit
SémaphoreDétruit
Détruit explicitement un sémaphore.
Versions 09 et supérieures
SémaphoreFin
Nouveauté 09
SémaphoreFin
SémaphoreFin
Autorise un ou plusieurs threads de sortir de la zone protégée par le sémaphore.

Exemple

Pour réaliser une affectation partagée par plusieurs threads, il est nécessaire d'encapsuler dans un sémaphore aussi bien l'affectation des variables que la lecture de ces variables.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire