Ich habe zusammengestellt und analysiert, um den Montag Ausgang für:Atomspeicher. Strukturen
struct S{
public:
int a,b,c,d,e,f,g,h,i,j,k;
};
int main() {
S s;
std::atomic<S> as;
as.store(s);
return 0;
}
ich sehen will, wie tut, ist es atomic store
in der Tat umgesetzt. Es ist einfach, wenn es um ausgerichtete "kleine" Operanden geht. Aber jetzt haben wir einen breiteren Operanden, also ist es eine kompliziertere Situation.
In meiner anderen Frage (Atomicity on x86) sagte @ Peter Cordes:
Für breitere Operanden, wie atomar neue Daten in mehrere Einträge einer Struktur zu schreiben, können Sie es mit einem Schloss schützen müssen, die alle Zugriff darauf Respekt. (Unter Umständen können Sie x86 Sperre CMPXCHG16B mit einer Wiederholungsschleife verwenden, um ein Atom 16b Speicher zu tun. Beachten Sie, dass es keine Möglichkeit gibt es zu emulieren ohne Schloss.)
Ok, aber was bedeutet es genau ? Was bedeutet es zu sperren? Insbesondere, ich weiß, dass lock
ist ein Präfix, das Atomizität von "vorfixierten" Anweisung gewährleistet. Insbesondere sagte @ Peter Cordes:
Unter Umständen können Sie auf x86-Sperre CMPXCHG16B mit einer Wiederholungsschleife zu tun, um eine Atom 16b speichern
Ich kann nicht verstehen, verwenden, wie es möglich ist, es zu halten Atom ? Ok, kann ich mir vorstellen, dass 16B Speicherbausteine auf atomare Weise gespeichert werden können? Aber was ist mit den nächsten Iterationen?
Ich hoffe, dass meine Zweifel verständlich sind, weil ich ein Problem hatte, es auszudrücken.
Ich war das Debuggen über Programm und auf meinem Auge, ist die Magie hinter atomic_store
. Ich nehme an, dass diese Funktion ausführt, was @Peter Cordes sagte. Wenn jemand will, kann ich einfügen hier zerlegt __atomic_store
Sie haben gesagt, dass Sie den generierten Maschinencode analysiert haben. Nun, dann können Sie * uns * sagen, wie dies umgesetzt wird! –
Ja, gehen Sie voran und fügen Sie die Demontage für __atomic_store ein. gcc erzeugt nur einen Aufruf mit den zu speichernden Daten, die als Referenz übergeben werden. –
Fehle ich die Frage hier ?? –