AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Ayuda / WLanguage / Funciones WLanguage / Funciones estándar / Funciones de gestión de procesos / Hilos, semáforos, señales y mutex
  • Presentación
  • ¿Qué es una sección crítica?
  • Variable CriticalSection
  • Sección crítica asociada a una variable
  • Caso especial
  • Ejemplo
  • Observaciones
  • Sección crítica con nombre
  • Principio
  • Programación en WLanguage
  • Funciones de gestión de secciones críticas
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Presentación
Los semáforos limitan la ejecución simultánea de un código (procedimiento, línea de código, etc.) a uno o más subprocesos en un momento dado. Un semáforo se puede compartir entre varias aplicaciones.
Existen otros sistemas que permiten proteger una sección de código:
  • Las exclusiones mutuas (Mutex) limitan la ejecución simultánea de un código (procedimiento, línea de código, etc.) a un solo subproceso en un momento dado. Un Mutex se puede compartir entre varias aplicaciones. Para obtener más información, consulte Gestionar la exclusión mutua en subprocesos.
  • Secciones críticas: Una sección crítica es un semáforo limitado a un solo subproceso en una sección de código (proceso, procedimiento, etc.).
¿Qué es una sección crítica?
Una sección crítica es un semáforo limitado a un solo subproceso en una sección de código (proceso, procedimiento, etc.).
A diferencia de los semáforos, una sección crítica solo se puede utilizar una vez.
Por ejemplo, se puede utilizar una sección crítica para proteger un procedimiento de actualización de los controles de una ventana.
Observación: Las secciones críticas son únicas para la aplicación que las creó. No se pueden compartir entre varias aplicaciones.
WINDEV, WEBDEV y WINDEV Mobile proponen varios métodos para implementar secciones críticas.
Variable CriticalSection
La variable CriticalSection permite implementar fácilmente una sección crítica con la sintaxis USING .. IN.
Ejemplo:
s is CriticalSection
USING s IN
// code protected by the critical section
// only one thread will execute this code at a given moment

END
Observaciones:
  • El tipo CriticalSection permite simplificar la declaración de secciones críticas.
  • Las variables de tipo CriticalSection cumplen con las reglas de alcance de variables.
Sección crítica asociada a una variable
Al declarar una variable, se puede asociar a una sección crítica utilizando el atributo critical section.
La sintaxis es la siguiente:
VariableName is VariableType <critical section>

or

VariableName is VariableType, critical section
Las secciones de código que manipulan estas variables deben estar entre las funciones CriticalSectionStart y CriticalSectionEnd.

Caso especial

Una sección crítica se asocia automáticamente a las variables en las que se realizan operaciones simples, tales como:
  • asignar un valor.
  • recuperar un valor.
  • incrementar, decrementar (+, -, ++, --, +=, -= operadores +, -, ++, --, += -=).

Ejemplo

// Global declarations of WIN_STAT window
gcySum is currency, critical section
gcyMax is currency, critical section
...
// Code run by several threads
cyOrderAmount is currency
...
// atomic operation, the critical section is automatically managed by WLanguage
gcySum += cyAmountOrder

// multiple operation, it is necessary to implement the critical section explicitly
USING CriticalSection(gcyMax) IN
IF cyAmountOrder > gcyMax THEN
gcyMax = cyAmountOrder
END
END

Observaciones

  • El atributo critical section está permitido en:
    • las variables globales del proyecto, conjunto de procedimientos, ventana, página y reporte.
    • las variables locales.
    • los miembros de clases.
    • los arrays: en este caso, el atributo está asociado al array y no a los elementos del array.
  • Las colas y las pilas están protegidas de forma predeterminada: el atributo critical section no es necesario.
Sección crítica con nombre

Principio

La sección crítica se define con la función CriticalSectionStart y se termina con CriticalSectionEnd.
El nombre de CriticalSection se pasa como parámetro a estas funciones mediante una cadena.
Ejemplo:
// Use of a named critical section
CriticalSectionStart("MySection")
// Two threads will not be able to run this code at the same time
...
CriticalSectionEnd("MySection")
Este método para utilizar las secciones críticas tiene varias desventajas:
  • riesgo de colisión entre varias secciones críticas con el mismo nombre.
  • secciones críticas que nunca se han liberado.
Programación en WLanguage

Funciones de gestión de secciones críticas

Las siguientes funciones WLanguage permiten gestionar las secciones críticas:
CriticalSectionHabilita un nombre o una sección crítica en Variable en la declaración Utilización ... EN.
CriticalSectionEndMarca el final de la sección crítica: el código será ejecutado por otro Thread.
CriticalSectionStartMarca el inicio de una sección crítica: ningún otro Thread podrá ejecutar el código mientras el Thread actual no salga de la sección crítica.
Para manipular las secciones críticas, también se puede utilizar el siguiente tipo:
CriticalSectionLas variables CriticalSection se utilizan para definir secciones críticas para limitar la ejecución simultánea de un código ( Procedure , línea de código, etc.) a un Thread en un momento dado en una aplicación.
Versión mínima requerida
  • Versión 9
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 21/06/2023

Señalar un error o enviar una sugerencia | Ayuda local