4D v16.3Sobre los semáforos |
||
|
4D v16.3
Sobre los semáforos
Sobre los semáforos
En un programa de ordenador, un semáforo es una herramienta que se utiliza para protegerse de las acciones que deben ser realizadas por un único proceso o usuario a la vez. En 4D, la necesidad convencional de uso de un semáforo es para modificar un array interproceso: si un proceso está modificando los valores del array, otro proceso no debe poder hacer lo mismo al mismo tiempo. El desarrollador utiliza un semáforo para indicar a un proceso que sólo puede realizar su secuencia de operaciones si ningún otro proceso está llevando a cabo las mismas tareas. Cuando un proceso se encuentra con un semáforo, hay tres posibilidades:
En 4D, se establece un semáforo llamando a la función Semaphore. Para liberar un semáforo, se llama al comando CLEAR SEMAPHORE. La función Semaphore tiene un comportamiento muy especial ya que realiza potencialmente dos acciones a la vez:
Esta doble acción realizada por el mismo comando asegura que ninguna operación externa se puede insertar entre la prueba del semáforo y su asignación. Puede utilizar el comando Test semaphore para saber si un semáforo ya está asignado o no. Este comando se utiliza principalmente como parte de las operaciones largas, tales como el cierre anual de las cuentas, en donde Test semaphore le permite controlar la interfaz para evitar el acceso a ciertas operaciones tales como la adición de los datos contables. Los semáforos deben utilizarse respetando los siguientes principios:
Este es el código típico para el uso de un semáforo: While(Semaphore("MySemaphore";300)) Un semáforo que no se libera puede bloquear parte de la base. Configurar y liberar el semáforo en el mismo método ayuda a eliminar este riesgo. Minimizar el código protegido por el semáforo aumenta la fluidez de la aplicación y evita que el semáforo sea un cuello de botella. Por último, utilizando el parámetro opcional contTics del comando Semaphore es esencial para optimizar la espera del semáforo a liberar. Utilizando este parámetro, los comandos funcionan de la siguiente manera:
El comando también da prioridad a las peticiones estableciendo una cola. De esta manera, el primer proceso que solicita un semáforo será el primero en obtener uno. Tenga en cuenta que el tiempo de espera se establece en función de las características específicas de la aplicación. Hay dos tipos de semáforos en 4D: semáforos locales y semáforos globales.
Los semáforos globales y locales son idénticos en su lógica. La diferencia reside en su alcance. En el modo cliente-servidor, los semáforos globales se comparten entre todos los procesos que se ejecutan en todos los clientes y servidores. Un semáforo local solamente se comparte entre los procesos que se ejecutan en la máquina donde se ha creado. En 4D, los semáforos globales o locales tienen el mismo alcance, ya que usted es el único usuario. Sin embargo, si su base se está utilizando en ambas configuraciones, asegúrese de usar semáforos globales o locales, dependiendo de lo que quiere hacer. Nota: se recomienda el uso de semáforos locales cuando se necesita un semáforo para gestionar un aspecto local para un cliente de la aplicación, tales como la interfaz o un conjunto de variables interproceso. Si se utiliza un semáforo global en este caso, no sólo haría intercambios de red innecesarios, sino también podría afectar a otros equipos cliente innecesariamente. El uso de un semáforo local evitaría estos indeseables efectos secundarios.
Ver también
|
PROPIEDADES
Producto: 4D
HISTORIA
ARTICLE USAGE
Manual de lenguaje 4D ( 4D v16) |