Diferencias entre Condicionales de las variables, los Mutexes y Cerraduras
-
20-08-2019 - |
Pregunta
Por ejemplo, el c++0x interfaces
Estoy teniendo un tiempo difícil averiguar cuándo el uso que de estas cosas (cv, exclusión mutua y de bloqueo).¿Alguien puede por favor explicar o apuntar a un recurso?
Gracias de antemano.
Solución
En la página que se refieren a, "mutex" es el bajo nivel de sincronización de la primitiva.Usted puede tomar un mutex y, a continuación, suéltelo, y sólo un subproceso puede tomar en cualquier momento (por lo tanto es una sincronización de los primitivos).Un recursiva mutex es uno que puede ser tomado por la mismo el hilo varias veces y, a continuación, se necesita ser liberada como muchas veces por el mismo hilo, antes de que otros se la puede llevar.
Un "bloqueo" aquí es sólo un contenedor de C++ clase que lleva a una exclusión mutua en su constructor y la libera en el destructor.Es útil para establecer la sincronización de C++ ámbitos.
Una variable de condición es una más avanzada y de alto nivel de la forma de sincronizar primitivo que combina un bloqueo con un "señalización" mecanismo.Se utiliza cuando los hilos necesidad de esperar a que un recurso esté disponible.Un subproceso puede "esperar" en un CV y, a continuación, el productor de los recursos puede "señal" de la variable, en cuyo caso los hilos que esperan en el CV recibir una notificación y puede continuar la ejecución.Un mutex es combinado con CV para evitar la condición de carrera donde un hilo empieza a esperar en un CV, al mismo tiempo, otro hilo quiere señal;entonces no es controlable si la señal se transmite o se pierde.
Otros consejos
No estoy muy familiarizado con C ++ 0x, así que tome esta respuesta con un grano de sal.
re: Mutex vs. bloqueos: De la documentación que publicó, parece que un mutex
es un objeto que representa un mutex del sistema operativo, mientras que un lock
es un objeto que contiene un mutex para facilitar el patrón RAII .
Las variables de condición son un mecanismo útil para asociar un mecanismo de bloqueo / señalización (señal + espera) con un mecanismo de exclusión mutua, pero mantenerlos desacoplados en el sistema operativo para que usted, como programador del sistema, pueda elegir la asociación entre condvar y mutex. (útil para tratar con múltiples conjuntos de objetos a los que se accede simultáneamente) Rob Krten tiene algunos buenas explicaciones sobre condvars en uno de los capítulos en línea de su libro sobre QNX .
En cuanto a referencias generales: Este libro (aún no publicado) parece interesante.