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.

¿Fue útil?

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.

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