Pregunta

En C#, cuando debemos usar WaitHandle en vez de lock ?

¿Fue útil?

Solución

Un bloqueo es fundamentalmente diferente de un WaitHandle. Con un bloqueo que escribe, por ejemplo:

lock (SomeResource)
{
    // do stuff here
}

La primera línea dice: "Quiero acceso exclusivo a ese recurso", y esperaré hasta que ese recurso esté disponible (es decir, nadie más tiene un bloqueo). Luego se ejecuta el código y al final se lanza el bloqueo para que otros puedan usarlo.

WaitHandle se usa para esperar a que tenga lugar algún evento. Cuando escribes:

MyWaitHandle.WaitOne();

Su código está esperando algún otro hilo (posiblemente en un proceso diferente) para indicar que WaitHandle. Lo que señala podría ser cualquier cosa. Quizás esté esperando que otro hilo termine su trabajo y diga: "Ya terminé", antes de que su código pueda continuar.

Entonces, para responder a su pregunta, debe usar un bloqueo cuando desee obtener acceso exclusivo a un recurso. Deberías usar WaitHandle Cuando quieras ser notificado de algún evento.

Otros consejos

Un Waithandle puede esperar múltiples manijas, un bloqueo puede esperar solo uno.

Cuándo lo necesitas. En serio, el bloqueo es azúcar sintáctico con Monitor, que probablemente usa WaitHandles internamente.

Úselo solo si necesita más flexibilidad (como por ejemplo, mantener un bloqueo más largo que el alcance actual ...) o administrar múltiples bloqueos en el orden correcto, etc.

Logran cosas completamente diferentes. A lock se utiliza para limitar el acceso a un bloque específico de código a un único hilo a la vez. A WaitHandle es la clase base para varias clases relacionadas con la concurrencia, como Semaphore, Mutex, AutoResetEvent, y ManualResetEvent, que le permiten controlar la concurrencia de maneras ligeramente diferentes. Por ejemplo, un Semaphore le permite limitar la concurrencia a no más que norte hilos, en lugar de un solo hilo.

WaitHandle a menudo se usa cuando tiene varios hilos en ejecución y desea esperar a que uno o todos ellos completen antes de continuar haciendo alguna otra acción. lock Se utilizaría si desea evitar que varios hilos accedan a un recurso compartido al mismo tiempo.

La mejor explicación radica en estos dos enlaces. Desafortunadamente, tendrá que leer un poco para obtener una respuesta completa al tipo de pregunta que hizo:

Esto también contiene un ejemplo:http://msdn.microsoft.com/en-us/library/system.threading.waithandle.aspx

http://msdn.microsoft.com/en-us/library/kad9xah9.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top