Me pregunto cómo se std::atomic_refpuede implementar de manera eficiente (uno std::mutexpor objeto) para objetos no atómicos, ya que la siguiente propiedad parece bastante difícil de aplicar:
Las operaciones atómicas aplicadas a un objeto a través de atomic_ref son atómicas con respecto a las operaciones atómicas aplicadas a través de cualquier otra atomic_ref que haga referencia al mismo objeto.
En particular, el siguiente código:
void set(std::vector<Big> &objs, size_t i, const Big &val) {
std::atomic_ref RefI{objs[i]};
RefI.store(val);
}
Parece bastante difícil de implementar, ya std::atomic_refque de alguna manera necesitaría elegir cada vez lo mismo std::mutex(a menos que sea un gran bloqueo maestro compartido por todos los objetos del mismo tipo).
¿Me estoy perdiendo de algo? ¿O cada objeto es responsable de implementar std::atomic_refy, por lo tanto, ser atómico o llevar un std::mutex?