Mutex y evento

Anonim

Mutex vs Evento

En C #, hay muchas opciones diferentes de sincronización de subprocesos. Los dos más utilizados son mutex y evento. ¿Cuál es exactamente la diferencia entre estos dos? ¿Cuál es la mejor opción?

La opción de evento es capaz de dar a los hilos la opción de bloquear hasta que un evento se transmita, por lo tanto, el nombre de "evento". Es lo mismo que poner algo para dormir y despertarlo solo cuando ocurre algo significativo. Los eventos son diferentes a los mutex porque los mutex no tienen la opción o función de señalización. Los eventos pueden borrar la señal una vez que alguien que pudo esperar se ha despertado. Incluso las API pueden permitir la opción de bloquear hasta que uno o todos los eventos diferentes estén señalados. Además, los eventos son objetos del núcleo. No son "más ligeros" en comparación con mutexes. Un evento es básicamente un objeto del núcleo que tiene dos estados. Normalmente, un evento señala la llegada de un evento y, a veces, incluso el final de una operación de E / S.

"Mutex" significa exclusión mutua. Es una forma de mecanismo de coordinación con alcance para los recursos que se comparten. Piense en ello como una forma de transacción. No está obligado a esperar aunque desea acceder a unos pocos recursos compartidos (solo en el caso de que otros ya lo estén accediendo) que está bloqueando. Un mutex consta de dos estados, aunque existe para llevar a cabo una exclusión mutua. Esto es para cuando desea proteger un tramo de código que generalmente actualiza un recurso compartido de la parte en la que se reclama el mutex a la parte en la que se lanzará. Esto lleva al hecho de que ningún otro hilo puede pasar a través de la sección.

Las personas que han intentado simular un evento con la ayuda de un mutex tuvieron que encontrar el problema en el que tan pronto como se adquiere el bloqueo o se señala el evento, la persona mantiene a todos fuera hasta que se libera el bloqueo. Esta no es la semántica de un evento que está siendo señalado. Un evento puede permanecer publicado y una forma de puerta estará disponible para todas las pruebas de subprocesos en el caso de que no tenga ningún bloqueo. Mutex comprometido con la sincronización entre procesos se encuentra en el objeto en modo kernel. Los eventos realizados para la sincronización multihebra bajo un método están en el objeto de modo de usuario.

El objeto mutex es demasiado pesado y demasiado general. Los objetos del evento son mucho más ligeros. La sincronización de modo de usuario se usa en la mayoría de las situaciones debido a que da menos ciclos de CPU. Mutex es muy similar a una sección crítica y se usa para sincronizar el acceso a los recursos que se comparten. Los eventos tienen una función totalmente diferente porque se usan para sincronizar tareas o para administrar la programación de tareas para algunas personas.

Los eventos son más una variable de condición, a diferencia de Mutex, que es más como un monitor en algunos de la terminología, o puede ser una forma tradicional de semáforo / mutex.

Resumen:

1. La opción de evento es capaz de dar a los hilos la opción de bloquear hasta que se transmite un evento, por lo tanto, el nombre "evento".

2.Un evento es básicamente un objeto del núcleo que tiene dos estados. Normalmente, un evento señala la llegada de un evento y, a veces, incluso el final de una operación de E / S.

3. "Mutex" significa exclusión mutua. Es una forma de mecanismo de coordinación con alcance para los recursos que se comparten.

4.Mutex se comprometió a la sincronización entre procesos en el objeto en modo kernel. Los eventos realizados para la sincronización multiproceso bajo un método se encuentran en el objeto de modo de usuario.

5. Los eventos son más una variable de condición, a diferencia del Mutex, que es más como un monitor en algunos de la terminología, o puede ser una forma tradicional de semáforo / mutex.