|
|
|
|
- Presentación
- Principio
- ¿Cómo implementar un semáforo?
- Etapas:
- Observaciones
- Funciones de gestión de semáforos
- Ejemplo
Gestionar los semáforos en subprocesos: limitar la ejecución simultánea de un código
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. Por ejemplo: Dos subprocesos específicos se utilizan en una aplicación bancaria: - un subproceso para depositar fondos en una cuenta
- un subproceso 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: - 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.
- Las secciones críticas limitan la ejecución simultánea de un código (procedimiento, línea de código, etc.) a un subproceso en un momento dado en una sola aplicación. Para obtener más información, consulte Gestionar secciones críticas.
El semáforo se crea con la función SemaphoreCreate. - El subproceso n°1 ejecuta la función SemaphoreStart: no hay ningún subproceso en el semáforo.
- El subproceso n°1 ejecuta la sección de código protegida por el semáforo.
- Mientras que el subproceso n°1 ejecuta el código protegido por el semáforo, el subproceso 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.
- El subproceso n°1 ejecuta la función SemaphoreEnd: ningún subproceso ejecuta el código del semáforo.
- El subproceso n°2 puede ejecutar el código protegido por el semáforo.
- El subproceso n°2 ejecuta la función SemaphoreEnd: ningún subproceso ejecuta el código del semáforo.
¿Cómo implementar un semáforo? Etapas: Las etapas para implementar un semáforo son las siguientes: - Crear un semáforo con la función SemaphoreCreate. El semáforo se asocia a un nombre.
- Llamar a la función SemaphoreStart antes de la sección de código que se va a proteger.
- 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 SemaphoreEnd no se protegerán.
- 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 subproceso puede estar en una de las áreas protegidas por el semáforo en un momento dado.
- Cuando hay un subproceso en espera, no se utilizan los recursos del procesador.
- Los semáforos se utilizan tanto en el subproceso principal con en los secundarios (creados con la función ThreadExecute). Se debe evitar bloquear el subproceso principal. Si se bloquea el subproceso 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, especifique cómo se compartirán (función SemaphoreCreate).
Funciones de gestión de semáforos Las siguientes funciones WLanguage permiten gestionar los semáforos:
| | SemaphoreCreate | Crea un semáforo. | SemaphoreDestroy | Destruye explícitamente un semáforo. | SemaphoreEnd | Permite a uno o más hilos salir del área protected por el semáforo. | SemaphoreStart | Bloquea el hilo actual hasta que se abra el semáforo (es decir, hasta que haya un punto "libre" disponible en la sección protected). |
Ejemplo Para hacer una asignación compartida entre varios subprocesos, se debe encapsular en un semáforo la asignación de las variables y la lectura de estas mismas.
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|