Diferencias entre variables condicionales, Mutexes y Bloqueos


Por ejemplo, las interfaces c++0x

Estoy teniendo dificultades para averiguar cuándo usar cuál de estas cosas (cv, mutex y lock). ¿Puede alguien explicar o señalar un recurso?

Gracias de antemano.

Author: Ronny Brendel, 2009-06-28

2 answers

En la página a la que se refiere, "mutex" es la primitiva de sincronización de bajo nivel real. Puede tomar un mutex y luego liberarlo, y solo un hilo puede tomarlo en un solo momento (por lo tanto, es una primitiva de sincronización). Un mutex recursivo es uno que puede ser tomado por el mismo hilo varias veces, y luego necesita ser liberado tantas veces por el mismo hilo antes de que otros puedan tomarlo.

Un" lock " aquí es solo una clase de envoltura de C++ que toma un mutex en su constructor y lo libera en el destructor. Es útil para establecer la sincronización para los ámbitos de C++.

Una variable de condición es una forma más avanzada / de alto nivel de sincronización primitiva que combina un bloqueo con un mecanismo de "señalización". Se usa cuando los subprocesos necesitan esperar a que un recurso esté disponible. Un subproceso puede "esperar" en un CV y luego el productor de recursos puede "señalar" la variable, en cuyo caso los subprocesos que esperan el CV son notificados y pueden continuar la ejecución. A mutex se combina con CV para evitar la condición de carrera donde un hilo comienza a esperar en un CV al mismo tiempo que otro hilo quiere señalarlo; entonces no es controlable si la señal se entrega o se pierde.

 64
Author: Antti Huima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-28 23:21:02

No estoy muy familiarizado con C++0x así que toma esta respuesta con un grano de sal.

Re: Mutex vs.locks: De la documentación que publicaste, parece que a mutex es un objeto que representa un mutex del sistema operativo, mientras que a lockes un objeto que contiene un mutex para facilitar el patrón de 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 mantenerlas desacopladas en el sistema operativo para que usted como sistema programador puede elegir la asociación entre condvar y mutex. Rob Krten tiene algunas buenas explicaciones sobre condvars en uno de los capítulos en línea de su libro sobre QNX.

En cuanto a las referencias generales: Este libro (aún no publicado) parece interesante.

 5
Author: Jason S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-28 18:45:39