PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

  • Présentation
  • La section critique
  • Présentation
  • Associer une section critique à une variable
  • Cas particulier : Section critique automatique
  • Les fonctions de gestion des sections critiques
Produits
WINDEVWEBDEV - Code ServeurWEBDEV - Code NavigateurWINDEV MobileEtats et Requêtes
Plateformes
WindowsLinuxWindows MobileUniversal Windows 10 AppAndroidWidget AndroidiPhone/iPadApple Watch
Langages
JavaPHPAjaxCode Utilisateur (MCU)Langage Externe
Bases de données
HFSQLHFSQL Client/ServeurProcédures stockéesOLE DBODBCAccès Natifs
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.
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.
La section critique

Présentation

Une section critique est un sémaphore limité à un seul thread sur une seule portion de code (traitement, procédure, ...).
Au contraire des sémaphores, une section critique peut être utilisée uniquement une seule fois.
Par exemple, il est possible d'utiliser une section critique pour protéger une procédure de mise à jour des champs d'une fenêtre.
Exemple :
SectionCritiqueDébut()
// Deux threads ne pourront pas exécuter ce code en même temps
...
SectionCritiqueFin()
Versions 21 et supérieures
AndroidWidget Android Non disponible en Android et en Widget Android

Associer une section critique à une variable

Lors de la déclaration d'une variable, il est possible d'associer cette variable à une section critique en utilisant l'attribut section critique.
La syntaxe est la suivante :
NomVariable est un TypeVariable <section critique>

ou

NomVariable est un TypeVariable, section critique
Les portions de code qui manipulent ces variables doivent ensuite être encadrées par les fonctions SectionCritiqueDébut et SectionCritiqueFin.
Exemple :
// Déclarations globales de la fenêtre FEN_STAT
gmoSomme est un monétaire, section critique
gmoMax est un monétaire, section critique
...
// Code exécuté par plusieurs threads
moMontantCommande est un monétaire
...
SectionCritiqueDébut(gmoSomme)
gmoSomme += moMontantCommande
SectionCritiqueFin(gmoSomme)

SectionCritiqueDébut(gmoMax)
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
SectionCritiqueFin(gmoMax)
Remarques :
  • L'attribut section critique est autorisé sur :
    • les variables globales de projet, collection de procédures, fenêtre, page et état.
    • les variables locales.
    • les membres de classes.
    • les tableaux : dans ce cas, l'attribut est associé au tableau et pas aux éléments du tableau.
  • Les files et les piles sont nativement protégées : l’attribut section critique n'est pas nécessaire.
Nouveauté 21
AndroidWidget Android Non disponible en Android et en Widget Android

Associer une section critique à une variable

Lors de la déclaration d'une variable, il est possible d'associer cette variable à une section critique en utilisant l'attribut section critique.
La syntaxe est la suivante :
NomVariable est un TypeVariable <section critique>

ou

NomVariable est un TypeVariable, section critique
Les portions de code qui manipulent ces variables doivent ensuite être encadrées par les fonctions SectionCritiqueDébut et SectionCritiqueFin.
Exemple :
// Déclarations globales de la fenêtre FEN_STAT
gmoSomme est un monétaire, section critique
gmoMax est un monétaire, section critique
...
// Code exécuté par plusieurs threads
moMontantCommande est un monétaire
...
SectionCritiqueDébut(gmoSomme)
gmoSomme += moMontantCommande
SectionCritiqueFin(gmoSomme)

SectionCritiqueDébut(gmoMax)
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
SectionCritiqueFin(gmoMax)
Remarques :
  • L'attribut section critique est autorisé sur :
    • les variables globales de projet, collection de procédures, fenêtre, page et état.
    • les variables locales.
    • les membres de classes.
    • les tableaux : dans ce cas, l'attribut est associé au tableau et pas aux éléments du tableau.
  • Les files et les piles sont nativement protégées : l’attribut section critique n'est pas nécessaire.
AndroidWidget Android Non disponible en Android et en Widget Android

Associer une section critique à une variable

Lors de la déclaration d'une variable, il est possible d'associer cette variable à une section critique en utilisant l'attribut section critique.
La syntaxe est la suivante :
NomVariable est un TypeVariable <section critique>

ou

NomVariable est un TypeVariable, section critique
Les portions de code qui manipulent ces variables doivent ensuite être encadrées par les fonctions SectionCritiqueDébut et SectionCritiqueFin.
Exemple :
// Déclarations globales de la fenêtre FEN_STAT
gmoSomme est un monétaire, section critique
gmoMax est un monétaire, section critique
...
// Code exécuté par plusieurs threads
moMontantCommande est un monétaire
...
SectionCritiqueDébut(gmoSomme)
gmoSomme += moMontantCommande
SectionCritiqueFin(gmoSomme)

SectionCritiqueDébut(gmoMax)
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
SectionCritiqueFin(gmoMax)
Remarques :
  • L'attribut section critique est autorisé sur :
    • les variables globales de projet, collection de procédures, fenêtre, page et état.
    • les variables locales.
    • les membres de classes.
    • les tableaux : dans ce cas, l'attribut est associé au tableau et pas aux éléments du tableau.
  • Les files et les piles sont nativement protégées : l’attribut section critique n'est pas nécessaire.
Versions 21 et supérieures
AndroidWidget Android Non disponible en Android et en Widget Android

Cas particulier : Section critique automatique

Une section critique est automatiquement associée aux variables sur lesquelles des opérations simples sont effectuées, telles que :
  • affectation d'une valeur.
  • récupération d'une valeur.
  • incrémentation, décrémentation (opérateurs +, -, ++, --, +=, -=).
Dans l'exemple suivant, il est possible d'éviter la mise en place d'une section critique sur le cumul de la variable "gmoSomme".
// Déclarations globales de la fenêtre FEN_STAT
gmoSomme est un monétaire, section critique
gmoMax est un monétaire, section critique
...
// Code exécuté par plusieurs threads
moMontantCommande est un monétaire

...
// Section critique automatique (opération simple)
gmoSomme += moMontantCommande

// Section critique non automatique (opération non simple)
SectionCritiqueDébut(gmoMax)
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
SectionCritiqueFin(gmoMax)
Nouveauté 21
AndroidWidget Android Non disponible en Android et en Widget Android

Cas particulier : Section critique automatique

Une section critique est automatiquement associée aux variables sur lesquelles des opérations simples sont effectuées, telles que :
  • affectation d'une valeur.
  • récupération d'une valeur.
  • incrémentation, décrémentation (opérateurs +, -, ++, --, +=, -=).
Dans l'exemple suivant, il est possible d'éviter la mise en place d'une section critique sur le cumul de la variable "gmoSomme".
// Déclarations globales de la fenêtre FEN_STAT
gmoSomme est un monétaire, section critique
gmoMax est un monétaire, section critique
...
// Code exécuté par plusieurs threads
moMontantCommande est un monétaire

...
// Section critique automatique (opération simple)
gmoSomme += moMontantCommande

// Section critique non automatique (opération non simple)
SectionCritiqueDébut(gmoMax)
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
SectionCritiqueFin(gmoMax)
AndroidWidget Android Non disponible en Android et en Widget Android

Cas particulier : Section critique automatique

Une section critique est automatiquement associée aux variables sur lesquelles des opérations simples sont effectuées, telles que :
  • affectation d'une valeur.
  • récupération d'une valeur.
  • incrémentation, décrémentation (opérateurs +, -, ++, --, +=, -=).
Dans l'exemple suivant, il est possible d'éviter la mise en place d'une section critique sur le cumul de la variable "gmoSomme".
// Déclarations globales de la fenêtre FEN_STAT
gmoSomme est un monétaire, section critique
gmoMax est un monétaire, section critique
...
// Code exécuté par plusieurs threads
moMontantCommande est un monétaire

...
// Section critique automatique (opération simple)
gmoSomme += moMontantCommande

// Section critique non automatique (opération non simple)
SectionCritiqueDébut(gmoMax)
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
SectionCritiqueFin(gmoMax)

Les fonctions de gestion des sections critiques

Les fonctions du WLangage spécifiques à la gestion des sections critiques sont les suivantes :
Versions 09 et supérieures
SectionCritiqueDébut
SectionCritiqueDébut
Signale le début d'une section critique : aucun autre thread ne pourra exécuter le code tant que le thread courant ne sera pas sorti de la section critique.
Versions 09 et supérieures
SectionCritiqueFin
Nouveauté 09
SectionCritiqueFin
SectionCritiqueFin
Signale la fin d'une section critique : un autre thread pourra exécuter le code.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire