PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • Présentation
  • Qu'est-ce qu'une section critique
  • La variable SectionCritique
  • La section critique associée à une variable
  • Cas particulier
  • Exemple
  • Remarques
  • La section critique nommée
  • Le principe
  • Programmation en WLangage
  • Les fonctions de gestion des sections critiques
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadApple WatchUniversal 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.
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 : Une section critique est un sémaphore limité à un seul thread sur une seule portion de code (traitement, procédure, ...).
Qu'est-ce qu'une section critique
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 ne peut être utilisée qu'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.
Remarque : Les sections critiques sont uniques pour l'application qui les a créés. Elles ne peuvent pas être partagées entre plusieurs applications.
WINDEV, WEBDEV et WINDEV Mobile proposent plusieurs méthodes pour mettre en place les sections critiques.
Versions 24 et supérieures
La variable SectionCritique
Le type de variable SectionCritique permet de mettre en place simplement une section critique grâce à la syntaxe UTILISER .. DANS.
Exemple :
s est une SectionCritique
UTILISER s DANS
// code protégé par la section critique
// un seul thread pourra exécuter ce code à un moment donné

FIN
Remarques :
  • Le type SectionCritique permet de simplifier la déclaration des sections critiques.
  • Les variables de type SectionCritique respectent les règles de portée de variables.
AndroidWidget Android Non disponible en Android et en Widget Android.
Nouveauté 24
La variable SectionCritique
Le type de variable SectionCritique permet de mettre en place simplement une section critique grâce à la syntaxe UTILISER .. DANS.
Exemple :
s est une SectionCritique
UTILISER s DANS
// code protégé par la section critique
// un seul thread pourra exécuter ce code à un moment donné

FIN
Remarques :
  • Le type SectionCritique permet de simplifier la déclaration des sections critiques.
  • Les variables de type SectionCritique respectent les règles de portée de variables.
AndroidWidget Android Non disponible en Android et en Widget Android.
La variable SectionCritique
Le type de variable SectionCritique permet de mettre en place simplement une section critique grâce à la syntaxe UTILISER .. DANS.
Exemple :
s est une SectionCritique
UTILISER s DANS
// code protégé par la section critique
// un seul thread pourra exécuter ce code à un moment donné

FIN
Remarques :
  • Le type SectionCritique permet de simplifier la déclaration des sections critiques.
  • Les variables de type SectionCritique respectent les règles de portée de variables.
AndroidWidget Android Non disponible en Android et en Widget Android.
Versions 21 et supérieures
La section critique associée à 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.

Cas particulier

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 +, -, ++, --, +=, -=).

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
...
// opération atomique, la section critique est gérée automatiquement par le WLangage
gmoSomme += moMontantCommande

// opération multiple, il est nécessaire de mettre en place la section critique explicitement
SectionCritiqueDébut(gmoMax)
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
SectionCritiqueFin(gmoMax)
// 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
...
// opération atomique, la section critique est gérée automatiquement par le WLangage
gmoSomme += moMontantCommande

// opération multiple, il est nécessaire de mettre en place la section critique explicitement
UTILISER SectionCritique(gmoMax) DANS
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
FIN

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.
Nouveauté 21
La section critique associée à 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.

Cas particulier

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 +, -, ++, --, +=, -=).

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
...
// opération atomique, la section critique est gérée automatiquement par le WLangage
gmoSomme += moMontantCommande

// opération multiple, il est nécessaire de mettre en place la section critique explicitement
SectionCritiqueDébut(gmoMax)
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
SectionCritiqueFin(gmoMax)
// 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
...
// opération atomique, la section critique est gérée automatiquement par le WLangage
gmoSomme += moMontantCommande

// opération multiple, il est nécessaire de mettre en place la section critique explicitement
UTILISER SectionCritique(gmoMax) DANS
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
FIN

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.
La section critique associée à 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.

Cas particulier

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 +, -, ++, --, +=, -=).

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
...
// opération atomique, la section critique est gérée automatiquement par le WLangage
gmoSomme += moMontantCommande

// opération multiple, il est nécessaire de mettre en place la section critique explicitement
SectionCritiqueDébut(gmoMax)
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
SectionCritiqueFin(gmoMax)
// 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
...
// opération atomique, la section critique est gérée automatiquement par le WLangage
gmoSomme += moMontantCommande

// opération multiple, il est nécessaire de mettre en place la section critique explicitement
UTILISER SectionCritique(gmoMax) DANS
SI moMontantCommande > gmoMax ALORS
gmoMax = moMontantCommande
FIN
FIN

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.
La section critique nommée

Le principe

La section critique est définie par la fonction SectionCritiqueDébut et terminée par la fonction SectionCritiqueFin.
Le nom de la sectionCritique est passé en paramètre à ces fonctions à l'aide d'une chaîne de caractères.
Exemple :
// Utilisation d'une section critique nommée
SectionCritiqueDébut("MaSection")
// Deux threads ne pourront pas exécuter ce code en même temps
...
SectionCritiqueFin("MaSection")
Ce mode d'utilisation des sections critiques comporte plusieurs inconvénients :
  • risque de collisions entre plusieurs sections critiques de même nom.
  • sections critiques jamais libérées.
AndroidWidget Android En Android, seule la syntaxe utilisant une section critique nommée est disponible.
Programmation en WLangage

Les fonctions de gestion des sections critiques

Les fonctions du WLangage spécifiques à la gestion des sections critiques sont les suivantes :
Versions 23 et supérieures
SectionCritique
Nouveauté 23
SectionCritique
SectionCritique
Active une section critique nommée ou sur une variable dans une instruction de type UTILISER ... DANS.
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.
Versions 24 et supérieures
Pour manipuler les sections critiques, il est également possible d'utiliser le type suivant :
Versions 24 et supérieures
SectionCritique
Nouveauté 24
SectionCritique
SectionCritique
Les variables de type SectionCritique permettent de définir des sections critiques afin de limiter l'exécution simultanée d'un code (procédure, ligne de code, ...) à un thread à un instant donné dans une seule application.
AndroidWidget Android Ce type de variable n'est pas disponible.
Nouveauté 24
Pour manipuler les sections critiques, il est également possible d'utiliser le type suivant :
Versions 24 et supérieures
SectionCritique
Nouveauté 24
SectionCritique
SectionCritique
Les variables de type SectionCritique permettent de définir des sections critiques afin de limiter l'exécution simultanée d'un code (procédure, ligne de code, ...) à un thread à un instant donné dans une seule application.
AndroidWidget Android Ce type de variable n'est pas disponible.
Pour manipuler les sections critiques, il est également possible d'utiliser le type suivant :
Versions 24 et supérieures
SectionCritique
Nouveauté 24
SectionCritique
SectionCritique
Les variables de type SectionCritique permettent de définir des sections critiques afin de limiter l'exécution simultanée d'un code (procédure, ligne de code, ...) à un thread à un instant donné dans une seule application.
AndroidWidget Android Ce type de variable n'est pas disponible.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire