Esta es la forma típica de usar una variable condición:¿Las variables de condición todavía necesitan un mutex si está cambiando el valor verificado atómicamente?
// The reader(s)
lock(some_mutex);
if(protected_by_mutex_var != desired_value)
some_condition.wait(some_mutex);
unlock(some_mutex);
// The writer
lock(some_mutex);
protected_by_mutex_var = desired_value;
unlock(some_mutex);
some_condition.notify_all();
Pero si protected_by_mutex_var se establece atómicamente por ejemplo, una instrucción de comparación y de intercambio, sirve el mutex cualquier propósito (excepto los de pthreads y otros Las API requieren que pases un mutex)? ¿Está protegiendo el estado utilizado para implementar la condición? Si no es así, ¿es seguro después de hacer esto ?:
// The writer
atomic_set(protected_by_mutex_var, desired_value);
some_condition.notify_all();
Con el escritor nunca directamente interactuar con mutex del lector? Tenga en cuenta que el nombre 'protected_by_mutex_var' ya no es realmente apropiado (ya no está protegido por mutex). Si es así, ¿es necesario que otros lectores usen el mismo mutex?
El punto de variables de condición es que hacen "comprobar el predicado, desbloquear el mutex, y dormir "atómico". –