Ich frage mich, wie std::atomic_ref
effizient (eine std::mutex
pro Objekt) für nichtatomare Objekte implementiert werden kann , da die folgende Eigenschaft ziemlich schwer durchzusetzen scheint:
Atomoperationen, die über eine atomare Referenz auf ein Objekt angewendet werden, sind atomar in Bezug auf atomare Operationen, die über eine andere atomare Referenz angewendet werden, die auf dasselbe Objekt verweist.
Insbesondere der folgende Code:
void set(std::vector<Big> &objs, size_t i, const Big &val) {
std::atomic_ref RefI{objs[i]};
RefI.store(val);
}
Scheint ziemlich schwierig zu implementieren, da das std::atomic_ref
irgendwie jedes Mal das gleiche auswählen müsste std::mutex
(es sei denn, es ist eine große Master-Sperre, die von allen Objekten des gleichen Typs gemeinsam genutzt wird).
Vermisse ich etwas Oder ist jedes Objekt für die Implementierung verantwortlich std::atomic_ref
und daher entweder atomar oder trägt ein std::mutex
?