Gostaria de saber como pode std::atomic_ref
ser implementado eficientemente (um std::mutex
por objeto) para objetos não atômicos, pois a propriedade a seguir parece bastante difícil de aplicar:
As operações atômicas aplicadas a um objeto por meio de um atomic_ref são atômicas em relação às operações atômicas aplicadas por qualquer outro atomic_ref que faz referência ao mesmo objeto.
Em particular, o seguinte 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, pois std::atomic_ref
seria necessário escolher sempre o mesmo std::mutex
(a menos que seja um grande bloqueio mestre compartilhado por todos os objetos do mesmo tipo).
Estou esquecendo de algo? Ou cada objeto é responsável por implementar std::atomic_ref
e, portanto, é atômico ou carrega um std::mutex
?