Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 17115|Respuesta: 0

[Comunicación] Explicación detallada de AutoResetEvent en .net/c#

[Copiar enlace]
Publicado en 20/3/2018 13:19:01 | | |

Conceptos relacionados con hilos
1. Sincronización de hilos
ManualResetEvent
El método Set() establece el estado en Signaled
Reset() para ponerlo en sin señal
WaitOne() bloqueará hasta que tenga señal, y si hay señal en el momento de llamar a WaitOne, no se bloqueará
AutoResetEvent
La diferencia con ManualResetEvent es que AutoResetEvent.WaitOne() cambia automáticamente el estado del objeto evento, es decir, el estado del evento cambia cada vez que se ejecuta AutoResetEvent.WaitOne(). Señal - > sin señal; Sin señal – > tiene señal
example:


  
myResetEven.Set(), que en realidad es equivalente a un switch, si el método set() no se ejecuta, el siguiente waitOne() no podrá esperar a que la notificación lo permita ejecutar, por lo que la instrucción posterior a waitOne no se ejecutará.
Método del monitor
El mecanismo Wait() Pulse() se utiliza para la interacción entre hilos, cuando un objeto emite Monitor.Wait(), el hilo que accede al objeto permanecerá en estado de espera. hasta que recibe una señal de despertar. Monitor.Pulse() se utiliza para enviar señales al hilo en espera.
Es decir, en el área crítica entre Monitor.Enter() y Monitor.Exit(), para liberar el bloqueo del objeto y bloquear el hilo actual, este está en estado de espera en la cola.

El candado es diferente al de Mutex
Sincronización de bloqueos entre múltiples hilos
Sincronización de múltiples hilos entre procesos Mutex, o sincronización de múltiples procesos
En la programación multihilo .Net, se utilizan a menudo las clases AutoResetEvent y ManualResetEvent, y su uso es muy similar, aunque existen diferencias. El método Set pone la señal en estado de envío, el método Reset pone la señal en estado no enviado, y WaitOne espera a que se envíe la señal. El estado inicial del constructor puede determinarse por el valor del parámetro; si es verdadero, no está bloqueando, y falso es el estado de bloqueo. Si un hilo llama al método WaitOne, el hilo recibe la señal cuando está en estado de envío y continúa ejecutándose hacia abajo. La diferencia es que, tras la llamada, AutoResetEvent.WaitOne() solo permite que entre un hilo a la vez, y cuando un hilo recibe una señal, AutoResetEvent automáticamente pondrá la señal en estado de sin envío, y los otros hilos que llaman a WaitOne solo pueden seguir esperando. Es decir, AutoResetEvent despierta solo un hilo a la vez; ManualResetEvent puede despertar varios hilos, porque cuando un hilo llama al método ManualResetEvent.Set(), los otros hilos que llaman a WaitOne reciben la señal para continuar la ejecución, y el ManualResetEvent no configura automáticamente la señal para que no se envíe. En otras palabras, a menos que el método ManualResetEvent.Reset() se llame manualmente, el ManualResetEvent permanecerá señalizado y el ManualResetEvent puede despertar varios hilos al mismo tiempo para continuar la ejecución.




Anterior:herramienta de análisis de archivos .har y HARViewer
Próximo:Implementación de bloqueo distribuido en Zookeeper
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com