¿Las variables de condición todavía necesitan un mutex si está cambiando el valor verificado atómicamente?
Aquí está la forma típica de usar una variable de condición:
// 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 protegido_por_mutex_var se establece atómicamente, por ejemplo, una instrucción de comparación e intercambio, ¿el mutex sirve para algún propósito (aparte de que pthreads y otras API requieren que pase un mutex)? ¿Es el estado de protección utilizado para implementar la condición? Si no, ¿es seguro hacer esto ?:
// The writer
atomic_set(protected_by_mutex_var, desired_value);
some_condition.notify_all();
¿Con el escritor nunca interactuando directamente con el 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 diferentes lectores usen el mismo mutex?