|
|
|
|
- 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
Gestionar secciones críticas
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. 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 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 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:
| | CriticalSection | Habilita un nombre o una sección crítica en Variable en la declaración Utilización ... EN. | CriticalSectionEnd | Marca el final de la sección crítica: el código será ejecutado por otro Thread. | CriticalSectionStart | Marca 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:
| | CriticalSection | Las 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. |
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|