PC SOFT

AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

  • Presentación
  • Principio
  • ¿Cómo implementar un semáforo?
  • Etapas:
  • Observaciones
  • Funciones de gestión de semáforos
  • Ejemplo
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
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 hilos en un momento dado. Un semáforo se puede compartir entre varias aplicaciones.
Por ejemplo: Dos hilos específicos se utilizan en una aplicación bancaria:
  • un hilo para depositar fondos en una cuenta
  • un hilo para retirar fondos de una cuenta.
En un momento dado, solo puede haber un depósito o retiro.
Observación: Existen otros sistemas que permiten proteger una sección de código:
  • Versiones 16 y posteriores
    Las exclusiones mutuas (Mutex) limitan la ejecución simultánea de un código (procedimiento, línea de código, etc.) a un solo hilo en un momento dado. Un Mutex se puede compartir entre varias aplicaciones. Consulte Gestionar la exclusión mutua en hilos para obtener más detalles.
    Nueva funcionalidad versión 16
    Las exclusiones mutuas (Mutex) limitan la ejecución simultánea de un código (procedimiento, línea de código, etc.) a un solo hilo en un momento dado. Un Mutex se puede compartir entre varias aplicaciones. Consulte Gestionar la exclusión mutua en hilos para obtener más detalles.
    Las exclusiones mutuas (Mutex) limitan la ejecución simultánea de un código (procedimiento, línea de código, etc.) a un solo hilo en un momento dado. Un Mutex se puede compartir entre varias aplicaciones. Consulte Gestionar la exclusión mutua en hilos para obtener más detalles.
  • Las secciones críticas limitan la ejecución simultánea de un código (procedimiento, línea de código, etc.) a un hilo en un momento dado en una sola aplicación. Consulte Gestionar secciones críticas para obtener más detalles.
Versiones 18 y posteriores
Universal Windows 10 App Esta funcionalidad ahora está disponible en modo Windows Store apps.
Widget Android Esta funcionalidad ahora está disponible en modo Android Widget.
Nueva funcionalidad versión 18
Universal Windows 10 App Esta funcionalidad ahora está disponible en modo Windows Store apps.
Widget Android Esta funcionalidad ahora está disponible en modo Android Widget.
Universal Windows 10 App Esta funcionalidad ahora está disponible en modo Windows Store apps.
Widget Android Esta funcionalidad ahora está disponible en modo Android Widget.
Versiones 19 y posteriores
iPhone/iPad Esta funcionalidad ahora está disponible para aplicaciones iPhone/iPad.
Nueva funcionalidad versión 19
iPhone/iPad Esta funcionalidad ahora está disponible para aplicaciones iPhone/iPad.
iPhone/iPad Esta funcionalidad ahora está disponible para aplicaciones iPhone/iPad.
Principio
El semáforo se crea con la función SemaphoreCreate.
  1. El hilo n°1 ejecuta la función SemaphoreStart: no hay ningún hilo en el semáforo.
  2. El hilo n°1 ejecuta la sección de código protegida por el semáforo.
  3. Mientras que el hilo n°1 ejecuta el código protegido por el semáforo, el hilo n°2 ejecuta la función SemaphoreStart: dado que el hilo n°1 está ejecutando el código protegido por el semáforo, el hilo n°2 debe esperar a que se libere el semáforo
  4. El hilo n°1 ejecuta la función SemaphoreEnd: ningún hilo ejecuta el código del semáforo.
  5. El hilo n°2 puede ejecutar el código protegido por el semáforo.
  6. El hilo n°2 ejecuta la función SemaphoreEnd: ningún hilo ejecuta el código del semáforo.
¿Cómo implementar un semáforo?

Etapas:

Las etapas para implementar un semáforo son las siguientes:
  1. Crear un semáforo con la función SemaphoreCreate. El semáforo se asocia a un nombre.
  2. Llamar a la función SemaphoreStart antes de la sección de código que se va a proteger.
  3. Llamar a la función SemaphoreEnd para delimitar la sección de código que se va a proteger. Las líneas de código que se encuentran después de la función SemaphoreEnd no estarán protegidas.
  4. Destruir el semáforo con la función SemaphoreDestroy.

Observaciones

  • Las secciones de código protegidas por un semáforo deben ser lo más cortas posible y tratar solo los procesos "críticos".
  • Se puede utilizar un semáforo con el mismo nombre para proteger varias secciones de código. Solo un hilo puede estar en una de las áreas protegidas por el semáforo en un momento dado.
  • Cuando hay un hilo en espera, no se utilizan los recursos del procesador.
  • Los semáforos se utilizan tanto en el hilo principal con en los secundarios (creados con la función ThreadExecute). Se debe evitar bloquear el hilo principal. Si se bloquea el hilo principal (en espera), no se puede ejecutar la aplicación.
  • Las funciones SemaphoreStart y SemaphoreEnd deben utilizarse en el mismo proceso (en un procedimiento, por ejemplo).
  • Los semáforos se pueden compartir o no entre las diferentes aplicaciones que se ejecutan en el equipo. Al crear los semáforos, se debe especificar su uso compartido (SemaphoreCreate).

Funciones de gestión de semáforos

Las siguientes funciones WLanguage permiten gestionar los semáforos:
Versiones 09 y posteriores
SemaphoreCreate
Nueva funcionalidad versión 09
SemaphoreCreate
SemaphoreCreate
Crea un semáforo.
Versiones 09 y posteriores
SemaphoreDestroy
Nueva funcionalidad versión 09
SemaphoreDestroy
SemaphoreDestroy
Destruye explícitamente un semáforo.
Versiones 09 y posteriores
SemaphoreEnd
Nueva funcionalidad versión 09
SemaphoreEnd
SemaphoreEnd
Permite que uno o más hilos salgan del área protegida por el semáforo.
Versiones 09 y posteriores
SemaphoreStart
Nueva funcionalidad versión 09
SemaphoreStart
SemaphoreStart
Cierra la actual Thread hasta que se abra el semáforo (es decir, hasta que se disponga de un espacio "libre" en la sección protegida).

Ejemplo

Para hacer una asignación compartida entre varios hilos, se debe encapsular en un semáforo la asignación de las variables y la lectura de estas mismas.
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