Im Gegensatz zu Sprachstandards behandeln GNU C- und GNU C-Compiler Atomizität basierend auf bestimmten Architekturen. Während C11 und C 11 _Atomic-Typen und std::atomic<> einführen. Dieser Artikel konzentriert sich ausschließlich auf natürlich atomare Lese- und Schreibvorgänge, ausgenommen atomare Inkremente, Dekremente oder zusammengesetzte Zuweisungen.
Auf einem 64-Bit-Linux Computer mit einem x86-64-Prozessor, die folgenden Typen verfügen natürlich über atomare Lesevorgänge und schreibt:
Es ist jedoch wichtig zu beachten, dass selbst diese Typen gemäß den Sprachstandards nicht definitiv automatisch atomar sind.
Es gibt zwei Hauptsinne von „atomic“:
Nur weil ein Typ auf Hardwareebene von Natur aus atomar ist, heißt das nicht, dass der Compiler wird immer atomare Anweisungen verwenden, um darauf zuzugreifen. Optimierungen können zu nicht-atomarem Zugriff führen, selbst für Datentypen, von denen bekannt ist, dass sie auf der Zielhardware atomar sind.
Zum Beispiel ist ein Ladevorgang aus einer 32-Bit-Ganzzahl auf x86 atomar, ein Compiler jedoch möglicherweise Verwenden Sie eine 16-Bit-Teilladung oder einen Speicher, der nicht garantiert atomar ist.
Zusammenfassend, da Es gibt keine Typen in C oder C, die auf einem 64-Bit-Computer definitiv automatisch atomar sind. Um den atomaren Zugriff sicherzustellen, ist es wichtig, die Typen _Atomic oder std::atomic zu verwenden oder sich auf die Dokumentation zu verlassen, um atomare Garantien für bestimmte Architekturen und Compiler zu überprüfen.
Das obige ist der detaillierte Inhalt vonWelche C- und C-Typen zeigen auf einem 64-Bit-x86-64-System von Natur aus atomares Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!