Ich möchte verstehen, wie Speicherbarrieren in C++ funktioniert. Zum Beispiel verwende ich std :: Atom in diesem Fall:Understanding std :: atomare Speicherbarrieren
#include <iostream>
#include <atomic>
int main()
{
std::atomic<int> a;
int n = load();//returns 1 or other value written by other thread
a.store (n, std::memory_order_release);
}
dass Code über semantisch gleich der Ist Code unten?
#include <iostream>
#include <atomic>
int main()
{
std::atomic<int> a;
int n = load();
std::atomic_thread_fence(std::memory_order_release);
n = 100;//assume assignment is atomic
}
Wenn ich recht habe, kann ich sicher sein, dass das Verhalten für alle C++ Funktionen gleich ist, welche Speicherbarrieren als Argument akzeptieren kann?
Meinst du in der zweiten Zeile der Hauptfunktion, in den zwei Beispielen 'int n = a.load (std :: memory_order_acquire)' und am zweiten Beispiel die vierte Zeile: 'a = 100'? – Oliv
Nein, Ladefunktion ist nicht std :: atomic load function. Das ist eine benutzerimplementierte Funktion, die einige Daten zurückgibt. –
Das Beispiel scheint durcheinander zu sein. Der erste Auszug speichert eindeutig einen Wert in "a". Aber der zweite Auszug bezieht sich überhaupt nicht auf "a", also warum ist er da? –