0

Ich portiere derzeit eine Windows C++ - Bibliothek als Hobby-Projekt als Lernerfahrung nach MacOS. Ich bin über einen Code mit den Win Interlocked * -Funktionen gestolpert und habe daher versucht, das Thema allgemein zu lesen.Klarstellung des atomaren Speicherzugriffs für verschiedene Betriebssysteme

Lesen verwandte Fragen hier in SO, ich verstehe, gibt es verschiedene Möglichkeiten, diese Operationen abhängig von der OS zu tun. Interlocked * in Windows, OSAtomic * in MacOS und ich fand auch, dass Compiler eingebaute (intrinsische) Operationen dafür haben.

Nach dem Lesen gcc builtin atomic memory access, bin ich links fragen Was ist der Unterschied zwischen intrinsischen und OSAtomic * oder Interlocked * Einsen? Ich meine, kann ich nicht zwischen OSAtomic * oder gcc builtin wählen, wenn ich auf MacOS bin, wenn ich gcc benutze? Das Gleiche wäre, wenn ich mit gcc in Windows wäre.

Ich lese auch, dass auf Windows Interlocked * als Inline-und intrinsische Versionen kommen. Was ist bei der Wahl zwischen intrinsisch oder inline zu beachten?

Im Allgemeinen, gibt es mehrere Optionen auf OSs was zu verwenden? Oder ist das wieder "es kommt darauf an"? Wenn ja, wovon hängt es ab?

Danke!

Antwort

1

Das eigentliche Problem ist dies.

Der Intel-Chipsatz, den wir alle kennen und lieben, hat keine wohldefinierte Reihenfolge für Speicherschreibvorgänge.

Intel® 64 Architektur Speicherbestellung White Paper. Dieses Dokument bietet einen Versuch, die Speicherschreibreihenfolge sorgfältig zu definieren.

[Dieses Dokument in Band 3A von Intel wurde 64 und-IA 32 Handbuch Architectures Software Developer verschmolzen.]

Intel® 64 und IA-32 Architektur Manual Volume 3A Software-Entwickler: System Programming Guide Teil 1 Dies ist die Überarbeitung dieses Dokuments.

http://www.intel.com/products/processor/manuals/

Da der Chip selbst zu gewährleisten Konsistenz keine spezifischen Speicherschreibaufträge gewährleisten, ist es das O links.

Die "hängt davon ab" ist "es hängt von den APIs in dem Betriebssystem ab, für das Sie die Software erstellen."

Mehr Lesen: http://en.wikipedia.org/wiki/Memory_ordering

http://rsim.cs.illinois.edu/Pubs/10-cacm-memory-models.pdf

+0

Ich bin mir nicht ganz klar, was Sie meinen. Was bedeutet das für die GCC-Built-in-Funktionen? Können sie auf jedem OS sowie den spezifischen OSAtomic * und Interlocked * verwendet werden? – murrekatt

+1

@murrekatt: Die GCC-Einbauten sind für POSIX-kompatible Betriebssysteme. Das beinhaltet oft MacOS. Windows ist kein POSIX-kompatibles Betriebssystem. Da die integrierten Funktionen jedoch auf die Hardware ausgerichtet sind, funktionieren sie möglicherweise unter Windows. Windows ist nicht standardisiert, daher hängt die Auswahl der Bibliotheken von Ihrem Zielbetriebssystem ab. –

+0

@ S.Lott ich sehe. Dann nimm mein Beispiel, wo ich jetzt auf MacOS bin. Ich kann jetzt entweder OSAtomic * oder den Compiler builtins wählen, richtig? Wie wähle ich aus? Was ist zu beachten? – murrekatt