En ciencias de la computación , un evento (también llamado evento semáforo ) es un tipo de mecanismo de sincronización que se usa para indicar a los procesos en espera cuando una condición particular se ha vuelto verdadera.
Un evento es un tipo de datos abstracto con un estado booleano y las siguientes operaciones:
- esperar : cuando se ejecuta, provoca la suspensión del proceso de ejecución hasta que el estado del evento se establezca en verdadero. Si el estado ya se estableció en verdadero antes de que se llamara a wait, wait no tiene ningún efecto. [ aclaración necesaria ]
- set : establece el estado del evento en verdadero, libera todos los procesos en espera.
- clear : establece el estado del evento en falso.
Diferentes implementaciones de eventos pueden proporcionar diferentes subconjuntos de estas posibles operaciones; por ejemplo, la implementación proporcionada por Microsoft Windows proporciona las operaciones esperar (WaitForObject y funciones relacionadas), establecer (SetEvent) y borrar (ResetEvent). Una opción que se puede especificar durante la creación del objeto de evento cambia el comportamiento de SetEvent para que solo se libere un hilo y el estado se devuelva automáticamente a falso después de que se libere ese hilo.
Los eventos que no tienen la función de reinicio , es decir, aquellos que se pueden completar solo una vez , se conocen como futuros . [1] Los monitores son, por otro lado, más generales ya que combinan la señalización de finalización con mutex y no permiten que el productor y el consumidor se ejecuten simultáneamente en el monitor, lo que lo convierte en una sección de evento + crítica .
Referencias
- ^ 500 líneas o menos, "Un rastreador web con asyncio Coroutines" de A. Jesse Jiryu Davis y Guido van Rossum dice "la implementación usa un asyncio. Aquí se muestra un evento en lugar del futuro. La diferencia es que un evento se puede restablecer, mientras que un futuro no puede pasar de resuelto a pendiente ".
enlaces externos
- Objetos de evento , Microsoft Developer Network
- Mecanismos de sincronización de subprocesos en Python