¿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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta