Frage

In einer C ++ Linux-Anwendung, was ist der einfachste Weg, um die Funktionalität, die das Verriegeln Funktionen auf Win32 zur Verfügung stellen? Insbesondere wird eine leichte Art und Weise zu erhöhen oder atomar 32 oder 64 Bit Integer hinzufügen?

War es hilfreich?

Lösung 7

Bei der weiteren Überprüfung dieser sieht vielversprechend aus. Yay Stack-Überlauf.

Andere Tipps

Intel Open-Source ThreadBuildingBlocks hat eine Vorlage, Atomic, die die gleiche Funktionalität wie .NET die Interlocked-Klasse bietet .

Im Gegensatz zu gcc Atomic Einbauten, ist es Cross-Plattform und hängt nicht von einem bestimmten Compiler. Als Nemanja Trifunovic richtig oben weist darauf hin, ist es auf der Vergleichs- und Auslagerungs Anweisung CPU von x86 und Itanium-Chips. Ich denke, man würde nichts anderes von einer Intel-Bibliothek erwarten:)

Nur wenige Hinweise, die Frage zu klären, die nichts mit Linux zu tun hat .

RWM (Read-Modify-Write) Operationen und diejenigen, die müssen in einem einzigen Schritt nicht ausführen, die Hardware-Unterstützung auszuführen atomar ; unter ihnen und -dekremente, fetch_and_add etc.

Für einige Architektur (einschließlich I386, AMD_64 und IA64) gcc hat eine eingebaute Unterstützung für Atom-Speicherzugriff, also keine externe libray erforderlich ist. Hier einige Informationen über die API lesen .

Genau genommen kann Linux Atom nicht bieten „verzahnte“ Funktionen wie diejenigen in Win32, einfach weil diese Funktionen Hardware-Unterstützung benötigen, und Linux läuft auf einigen Plattformen, die nicht diese Unterstützung anbieten. Having said that, wenn Sie sich auf Intel x86 / x64 beschränken können, einen Blick auf die Umsetzung der Referenzzählung in Boost-nehmen Zeiger Bibliothek geteilt.

Die Atome Funktionen von der Apache Portable Runtime sind ganz in der Nähe auf die Win32 InterlockedXXX Funktionen.

Sie können einige Assembler-Code in Ihre Quelle einzufügen, x68 verzahnt Anweisungen direkt zu verwenden.

Sie sollten eine Verriegelung XADD Betrieb.

Siehe zum Beispiel diese .

Die relativ häufig glib Bibliothek, die in GTK und QT-Programmierung als auch als Standalone verwendet werden bietet eine Vielzahl von atomaren Operationen. Siehe http://library.gnome.org/devel/glib /2.16/glib-Atomic-Operations.html für eine Liste . Es gibt g_atomic Funktionen für die meisten Operationen, die Verschlungene auf Win32 unterstützt, und auf Plattformen, auf denen die Hardware diese direkt unterstützt, werden sie als erforderlich Assembler-Code inlined.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top