Wie führe ich grundlegende Operationen mit std :: atomic durch, wenn der Typ nicht Integral ist?

8

Um genau zu sein, muss ich nur ein Doppel um ein weiteres Doppel erhöhen und möchte, dass es threadsicher ist. Ich möchte nicht Mutex dafür verwenden, da die Ausführungsgeschwindigkeit drastisch abnehmen würde.

    
Noozen 16.04.2014, 17:32
quelle

2 Antworten

14

In der Regel versucht die C ++ - Standardbibliothek nur Operationen bereitzustellen, die effizient implementiert werden können. Für std::atomic bedeutet dies Operationen, die in einer Anweisung oder zwei auf "gemeinsamen" Architekturen blockfrei ausgeführt werden können. "Gemeinsame" Architekturen haben atomare Fetch-and-Add-Anweisungen für Ganzzahlen, aber nicht für Fließkommatypen.

Wenn Sie mathematische Operationen für atomare Gleitkommatypen implementieren möchten, müssen Sie dies selbst mit einer CAS-Schleife (Vergleichen und Tauschen) tun ( Lebe in Coliru ):

%Vor%     
Casey 16.04.2014, 18:02
quelle
-1

Benutze also das ganzzahlige Atom als Speicherbarriere. Hier ist eine Seite mit Quelle und Erklärung: Ссылка

    
MagikWorx 16.04.2014 18:01
quelle

Tags und Links